c# - 在 WPF 项目中,如何初始化窗口和控件,然后跳转到主循环?

标签 c# wpf visual-studio loops program-entry-point

如果问题措辞不当,对于 C# 来说是个新手,我们深表歉意。我正在尝试制作一款文字冒险游戏。我已经编写了所有底层逻辑,并决定尝试使用 WPF 来处理基本图形。因此,我使用所需的所有控件初始化窗口,然后循环执行主循环,直到触发退出。我最初尝试在初始化窗口后立即放置循环。

public MainWindow()
{
    InitializeComponent();
    Game.Logic();
}

这并没有真正发挥作用,因为窗口根本停止了初始化。 所以我用谷歌搜索了一下并尝试使用加载事件。一旦我这样做了,当我运行代码时,窗口会弹出,但没有任何控件出现,并且窗口被卡住。当我尝试对控件本身使用加载事件时,同样的问题仍然存在。虽然我的游戏循环中可能存在某种错误,但我认为如果我正确地跳入循环,窗口至少应该能够初始化其所有控件。正确的做法是进入应用程序文件并在那里使用加载事件吗?或者我只是完全不合规矩?

最佳答案

你太不合规矩了。

通过在 UI 线程上执行紧密循环,您将消除 UI 更新的任何机会,即使您已经克服了当前的障碍。就Windows而言;你被“卡住”了。

您需要在另一个线程上运行逻辑循环,并使用 Dispatcher.BeginInvoke 将任何 UI 更新(并且 UI 更新)返回到 UI 线程。虽然通常在游戏环境中没有那么有用,但也可以考虑使用带有 Binding 的 MVVM 模式,因为它更难陷入这个陷阱。

对于文本冒险,我强烈推荐 MVVM 模式,因为所有元素都可以轻松表示为绑定(bind)项/集合。另外,它还可以让您进入良好的现代开发实践:)

关于c# - 在 WPF 项目中,如何初始化窗口和控件,然后跳转到主循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42150295/

相关文章:

c# - 更改 Google 身份验证请求的语言 - Oauth 2.0

c# - 保存字符串中的重复值

c# - 无需装饰器的反序列化

c# - 使用 MediaCapture 时纵横比/缩放级别发生变化的问题?

c# - 如何获取元素 WPF 的子元素

visual-studio - 为什么每次打开 .xaml 文件时我的 Visual Studio 2008 都会关闭?

visual-studio - 在 Visual Studio 中从类生成接口(interface)时如何复制注释?

c# - CRUD ASP.NET Core 的最佳实践设计 DTO?

wpf - 是什么导致 VS 2010 SP1 WPF 设计器崩溃?

visual-studio - Ctrl + Shift + Enter 不适用于 Visual Studio 2013 强大的生产力工具