首页 新闻 会员 周边 捐助

WPF 异步Dispatcher.BeginInvoke的问题

0
悬赏园豆:10 [待解决问题]

如题,这是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调用主窗口

wpf
BoyLife的主页 BoyLife | 初学一级 | 园豆:18
提问于:2013-07-08 20:19
< >
分享
所有回答(5)
0

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方线程刷新。。。

你要刷新界面最好用依赖属性

其实我不笨 | 园豆:204 (菜鸟二级) | 2013-07-08 20:45

不行,还是卡的一动不动

支持(0) 反对(0) BoyLife | 园豆:18 (初学一级) | 2013-07-08 21:00
0

注释掉Console.WriteLine(i+"======="+i);试式

dudu | 园豆:30948 (高人七级) | 2013-07-08 21:29
0

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());
}));

nil | 园豆:886 (小虾三级) | 2013-07-09 14:32
0

你的base.Window.Dispatcher.BeginInvoke 方法也是放在主线程中的吗?试试放在后台线程。

Lee's Blog | 园豆:530 (小虾三级) | 2014-01-20 16:41
0

DispatcherPriority.Normal太高改为DispatcherPriority.Background即可

Pony440 | 园豆:204 (菜鸟二级) | 2016-10-06 11:00
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册