zoukankan      html  css  js  c++  java
  • 跨线程更新窗体

    方法1:我不喜欢
    启动异步操作,使用 RunWorkerAsync 方法。
    RunWorkerAsync 采用一个可选的 object 参数,可以使用该参数将变量传递给辅助方法。BackgroundWorker 类公开 DoWork 事件,您的辅助线程通过 DoWork 事件处理程序附加到该事件。

    DoWork 事件处理程序采用一个 DoWorkEventArgs 参数,该参数具有 Argument 属性。此属性接收来自 RunWorkerAsync 的参数,并可以传递至 DoWork 事件处理程序中调用的辅助方法。


    RunWorkerCompleted事件在后台线程执行完毕后有主线程调用。可在该事件处理程序中执行界面的更新操作。

    方法2:我喜欢
    在跨线程更新窗体的成员方法中应用如下结构:
    为改造前:
    public   void UpdateControl(int x,inty)
    {
          some code...
    }

    改造后:
    delegate void UpdateControlCallback (int x,int y);
    public void UpdataControl(int x,int y)
    {
       if(this.InvokeRequired)
          { UpdataControlCallback d = new UpdataControlCallback(UpdataControl);
             this.Invoke(d,new object[]{x,y});
          }
       else
          {
             some code...
          }
     }

  • 相关阅读:
    Electron踩坑记录
    TypeScript实现设计模式——生成器模式
    在express中使用ES7装饰器构建路由
    微信小程序下载文件(非图片),并校验扩展名。
    防抖与节流
    yarn
    spark
    docker php-fpm中安装GD库
    thinkphp6 多应用路由遇坑记
    CentOS 7 开启SSH远程登录
  • 原文地址:https://www.cnblogs.com/Drizzle/p/574932.html
Copyright © 2011-2022 走看看