在 WPF 项目中,如何初始化我的 Window 和控件,然后跳转到主循环?
In a WPF project, how do I initialize my Window and controls and then jump into a main loop?
如果问题措辞不当,对于 C# 来说是新手,我们深表歉意。我正在尝试进行文字冒险。我已经编写了所有底层逻辑,并决定尝试将 WPF 用于基本图形。所以我用我需要的所有控件初始化 window,然后循环我的主循环,直到触发退出。我最初尝试在初始化 window.
之后立即放置循环
public MainWindow()
{
InitializeComponent();
Game.Logic();
}
这并没有很好地工作,因为 Window 根本停止了初始化。
所以我在谷歌上搜索了一下并尝试使用加载事件。一旦我这样做了,当我 运行 代码时 Window 弹出,但是控件的 none 出现并且 window 被冻结。当我尝试对控件本身使用加载事件时,同样的问题仍然存在。虽然我的游戏循环中可能存在某种错误,但我认为如果我正确地跳入循环,Window 至少应该能够初始化它的所有控件。正确的做法是进入 App 文件并在那里使用 Loaded Event 吗?还是我完全不合时宜?
你太过分了。
通过在 UI 线程上执行一个紧密的循环,你正在扼杀任何 UI ever 更新的机会,即使你已经超过了你的当前的障碍。就 Windows 而言;你是 "frozen".
您需要 运行 您的逻辑在另一个线程上循环并使用 Dispatcher.BeginInvoke
获取任何 UI 更新(并且 仅 UI 更新)回到 UI 线程。虽然通常在游戏环境中没有那么有用,但也可以考虑将 MVVM 模式与 Binding
一起使用,因为它更难掉入这个陷阱。
对于文本冒险,我会强烈推荐 MVVM 模式,因为您的所有元素都可以很容易地表示为绑定 items/collections。此外,它还能让您了解良好的现代开发实践:)
我建议使用 Background Worker,它允许您使用 multi-threading 执行 UI 更新,以确保您的主线程保持响应。
如果问题措辞不当,对于 C# 来说是新手,我们深表歉意。我正在尝试进行文字冒险。我已经编写了所有底层逻辑,并决定尝试将 WPF 用于基本图形。所以我用我需要的所有控件初始化 window,然后循环我的主循环,直到触发退出。我最初尝试在初始化 window.
之后立即放置循环public MainWindow()
{
InitializeComponent();
Game.Logic();
}
这并没有很好地工作,因为 Window 根本停止了初始化。 所以我在谷歌上搜索了一下并尝试使用加载事件。一旦我这样做了,当我 运行 代码时 Window 弹出,但是控件的 none 出现并且 window 被冻结。当我尝试对控件本身使用加载事件时,同样的问题仍然存在。虽然我的游戏循环中可能存在某种错误,但我认为如果我正确地跳入循环,Window 至少应该能够初始化它的所有控件。正确的做法是进入 App 文件并在那里使用 Loaded Event 吗?还是我完全不合时宜?
你太过分了。
通过在 UI 线程上执行一个紧密的循环,你正在扼杀任何 UI ever 更新的机会,即使你已经超过了你的当前的障碍。就 Windows 而言;你是 "frozen".
您需要 运行 您的逻辑在另一个线程上循环并使用 Dispatcher.BeginInvoke
获取任何 UI 更新(并且 仅 UI 更新)回到 UI 线程。虽然通常在游戏环境中没有那么有用,但也可以考虑将 MVVM 模式与 Binding
一起使用,因为它更难掉入这个陷阱。
对于文本冒险,我会强烈推荐 MVVM 模式,因为您的所有元素都可以很容易地表示为绑定 items/collections。此外,它还能让您了解良好的现代开发实践:)
我建议使用 Background Worker,它允许您使用 multi-threading 执行 UI 更新,以确保您的主线程保持响应。