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("更新\n");
}

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

msdn.microsoft.com/zh-cn/visualc/ms...
转载:www.cnblogs.com/nsky/p/4436309.htm...

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!