如果问题措辞不当,对于 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/