zoukankan      html  css  js  c++  java
  • C# WinForm 线程间操作无效: 从不是创建控件的线程访问它的解决办法

    .net2后是不能跨线程访问控件的。,窗体上的控件是当前线程创建的,当用户异步执行一个方法:在该方法中给窗体上的控件赋值,记住:当执行一个异步委托的时候,其实

    就是开了一个线程去执行那个方法,这样就会报错:线程间操作无效: 从不是创建控件“某某某”的线程访问它。

    1.在窗口线程中设置CheckForIllegalCrossThreadCalls = false

    public Form1()
    {
    	InitializeComponent();
    	Control.CheckForIllegalCrossThreadCalls = false;
    }
    

    2. 利用委托

    private void button1_Click(object sender, EventArgs e)
            {
                new Action(show).BeginInvoke(null, null);
            }
    
            void show()
            {
                //异步外的方法。这样窗体不会假死
                while (true)
                {
                    Thread.Sleep(2000);
                    Action ac = new Action(showText);
                    this.Invoke(ac); //在同步方法里面实现更新窗体上的数据
                }
            }
    
            /// <summary>
            /// 更新数据
            /// </summary>
            void showText()
            {
                richTextBox1.AppendText("更新
    ");
            }
    

    大家可以参考下MSDN:
    如何:对 Windows 窗体控件进行线程安全调用

    http://msdn.microsoft.com/zh-cn/visualc/ms171728(VS.85,printer).aspx
    转载:https://www.cnblogs.com/nsky/p/4436309.html

  • 相关阅读:
    加分二叉树
    香甜的黄油 Sweet Butter
    09.22今日暂时停更题解
    能量项链
    转圈游戏
    字串变换
    关押罪犯
    选择客栈
    神经网络
    未整理算法的总结
  • 原文地址:https://www.cnblogs.com/cxfs/p/14060943.html
Copyright © 2011-2022 走看看