【发布时间】:2018-01-04 20:13:53
【问题描述】:
我在使用 WPF 时遇到了循环和冻结屏幕的问题。 我的示例代码在这里
private void Btn1_OnClick(object sender, RoutedEventArgs e)
{
ThreadPool.QueueUserWorkItem(
o =>
{
FaturaCount.Dispatcher.InvokeAsync(() =>
{
int a = 0;
for (int i = 0; i < 10000000000; i++)
{
a = a + i;
}
txtCount.Text = a.ToString();
}, DispatcherPriority.Background);
});
}
在循环继续时屏幕冻结。 我想让循环在后面工作,并且屏幕仍然可以使用,直到它完成。 为什么会发生,我该如何解决?
【问题讨论】:
-
您正在启动一个线程,然后在 UI 线程中完成所有工作。无需将整个循环放入 Invoke lambda 中,只需调用您需要触摸 UI 的一小部分 - 或者,更好的是,编写一个视图模型并通过绑定更新
txtCount.Text,这将为您执行调用,您甚至不必考虑调度程序。 -
我在线程下方放置了循环,它解决了我的问题。谢谢解答
标签: c# wpf multithreading freeze dispatcher