zoukankan      html  css  js  c++  java
  • c#使用MethodInvoker解决跨线程访问控件

    .net 原则上禁止跨线程访问控件,因为这样可能造成错误的发生,有一种方法是禁止编译器对跨线程访问作检查,Control.CheckForIllegalCrossThreadCalls = false;可以实现访问,但是出不出错不敢保证C#跨线程访问控件运行时错误。

    使用MethodInvoker即可解决:

    原代码:

             private void btnOK_Click(object sender, EventArgs e)
             {
                 tslInfo.Text = "请稍候...";
                 Thread td = new Thread(new ThreadStart(run));
                 td.Start();
             }

             /// <summary>
             /// 线程方法
             /// </summary>
             private void run()
             {
                 this.tslInfo.Text = "就绪";
             }


    修改后:
             private void btnOK_Click(object sender, EventArgs e)
             {
                 tslInfo.Text = "请稍候...";
                 Thread td = new Thread(new ThreadStart(threadRun));
                 td.Start();
             }

             /// <summary>
             /// 原线程方法
             /// </summary>
             private void run()
             {
                 this.tslInfo.Text = "就绪";
             }

             /// <summary>
             /// 线程方法
             /// </summary>
             private void threadRun()
             {
                 MethodInvoker In = new MethodInvoker(run);
                 this.BeginInvoke(In);
             }


  • 相关阅读:
    hdu 4614 线段树 二分
    cf 1066d 思维 二分
    lca 最大生成树 逆向思维 2018 徐州赛区网络预赛j
    rmq学习
    hdu 5692 dfs序 线段树
    dfs序介绍
    poj 3321 dfs序 树状数组 前向星
    cf 1060d 思维贪心
    【PAT甲级】1126 Eulerian Path (25分)
    【PAT甲级】1125 Chain the Ropes (25分)
  • 原文地址:https://www.cnblogs.com/riskyer/p/3341839.html
Copyright © 2011-2022 走看看