如题,这是WPF的异步更新UI的的一个方法 ,可是我在这个方法里面做个整数循环做测试,结果我的主线程被阻塞了 ,这是什么原因?
我的代码
base.Window.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Normal, new Action(() =>
{
for (int i = 0; i < 1000000; i++)
{
for (int j = 0; j < 10000000; j++)
{
Console.WriteLine(i+"======="+i);
}
}
}));
我的代码是写在ViewModel 中的所以是 base.Window调用主窗口
Task.Foctory.StartNew(()=》
{
Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal, new Action(() =>
{
for (int i = 0; i < 1000000; i++)
{
for (int j = 0; j < 10000000; j++)
{
Console.WriteLine(i+"======="+i);
}
}
}));
}
);
用第3方线程刷新。。。
你要刷新界面最好用依赖属性
不行,还是卡的一动不动
注释掉Console.WriteLine(i+"======="+i);试式
base.Window.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Normal, new Action(() =>
{
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 1000000; i++)
{
for (int j = 0; j < 10000000; j++)
{
sb.Append(i+"======="+i);
}
}
Console.WriteLine(sb.ToString());
}));
你的base.Window.Dispatcher.BeginInvoke 方法也是放在主线程中的吗?试试放在后台线程。
DispatcherPriority.Normal太高改为DispatcherPriority.Background即可