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

     
     
  • 相关阅读:
    机器学习——朴素贝叶斯
    机器学习——决策树
    机器学习——线性回归
    机器学习——KNN
    机器学习——数据预处理
    爬虫——scrapy入门
    爬虫——生产者消费者
    想写篇技术性散文
    (景德镇)麻将规则服务描述
    Visual Studio 2013环境下操作vc6/vc7/vc8等低版本平台项目【编译|生成|调试】
  • 原文地址:https://www.cnblogs.com/lvdongjie/p/5428815.html
Copyright © 2011-2022 走看看