zoukankan      html  css  js  c++  java
  • 关于Control.Dispatcher.BeginInvoke卡界面

      Control.Dispatcher.BeginInvoke里的逻辑由UI线程执行,如果内部包含耗时操作就会造成界面卡住。

      Action.BeginInvoke里的逻辑,将在一个新开的线程中执行,而不是UI线程,所以不会造成界面卡住。但其内部不能直接对UI操作,所以若需要访问UI,需要将访问UI的那部分代码用Control.Dispatcher.BeginInvoke包起来,其中Control属于你要访问的UI,或者说Control与你要访问的UI在同一线程。

    示例:

    new Action(() =>

    {

      //耗时非UI操作放这

      Control.Dispatcher.Invoke(new Action(() =>

      {

        //操作UI(同步)

      }));

      Control.Dispatcher.BeginInvoke(new Action(() =>

      {

        //操作UI(异步)

      }));

      //耗时非UI操作放这

    }).BeginInvoke(null, null);

  • 相关阅读:
    第八周作业
    第八周上机练习
    第七周上机练习
    第六周作业
    第六周上机练习
    第五周上机练习
    第四周作业
    第四次上机作业
    第三周作业
    第一次上机作业
  • 原文地址:https://www.cnblogs.com/ohzxc/p/7424783.html
Copyright © 2011-2022 走看看