我遇到了一个可能很简单的问题:
我用 MVVM 灯构建了一个 MVVM 应用程序。
当我进行大量计算时,我的 UI 没有响应。
我需要一个调度程序,因为我想访问一些依赖对象。
我尝试使用该代码:(可能无法正常工作,因为我使用的是应用程序线程?!)
Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(() =>
{
//LongTimeStuff
}));
我也试过:
DispatcherHelper.Initialize();
DispatcherHelper.CheckBeginInvokeOnUI(() =>
{
//LongTimeStuff
});
但是在这里我遇到了问题,我的依赖对象在另一个线程中。
我在一个新线程的函数中所做的所有这些事情:
Thread CalculationThread = new Thread(this.Calculate);
谢谢!
最佳答案
Dispatcher BeginInvoke 或 InvokeAsync 不运行任何单独的线程。它仅将任务添加到任务的调度程序队列。但是调度程序队列总是在 UI 线程上处理。
这是你应该做的:
void CommandExecuted()
{
Task.Run(() =>
{
//long running stuff
Dispatcher.BeginInvoke(new Action(() =>
{
//access ui here
}));
}
或使用异步模式:
async void CommandExecuted()
{
await Task.Run(() =>
{
//long running stuff
});
//access ui here
}
关于c# - MVVM 调度程序 UI 无响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30102671/