C#: 线程间操做无效: 从不是建立控件“dataGridView”的线程访问它

最近在修改自动化小工具,用多线程来解决后台拷贝致使WinForm界面卡死的状况,可是遇到过错:线程间操做无效: 从不是建立控件“dataGridView”的线程访问它。安全

这是由于在多线程程序中,新建立的线程不能访问UI线程建立的窗口控件,若是须要访问窗口中的控件,有2种解决方法:多线程

1. 在Form_Load中添加:工具

//取消跨线程检查
Control.CheckForIllegalCrossThreadCalls = false;

这样进行非安全线程访问时,运行环境就不去检验它是不是线程安全的。this

可是不推荐这种方法!!!spa

2. 利用委托机制实现线程安全。线程

就是将你所要操做的代码放到一个代理中,而后将这个代理交给建立这个控件的线程来执行你的代码。代理

//声明委托:
private delegate void DelegateDataGridViewWRLUI();
//使用委托在多线程中执行:
DelegateDataGridViewWRLUI delegateDataGridViewWRLUI = delegate
{
    this.dataGridViewWRL.DataSource = dataList;
    this.dataGridViewWRL.Refresh();
    this.dataGridViewWRL.EditMode = DataGridViewEditMode.EditOnEnter;//鼠标单击编辑
    this.dataGridViewWRL.RefreshEdit();
    this.dataGridViewWRL.Columns[1].Frozen = true; //固定左侧2列
};
this.dataGridViewWRL.Invoke(delegateDataGridViewWRLUI);
相关文章
相关标签/搜索