首页 > 代码库 > 线程间操作无效: 从不是创建控件的线程访问它
线程间操作无效: 从不是创建控件的线程访问它
public partial class Form1 : Form { private delegate void DelegateSetText(string text); private void SetText(string text) { if (this.txtMessage.InvokeRequired) { Invoke(new DelegateSetText(SetText), text); } else { this.txtMessage.Text += text; } } public Form1() { InitializeComponent(); //Control.CheckForIllegalCrossThreadCalls = false; } private void btnTest_Click(object sender, EventArgs e) { var t = Task.Factory.StartNew(() => { Do(); }); }
private void Do() { btnTest.Invoke(new MethodInvoker(delegate() { btnTest.Enabled = false; })); txtMessage.Invoke(new MethodInvoker(delegate() { txtMessage.Text = ""; })); //this.Invoke(new MethodInvoker(() => { btnTest.Enabled = false; })); //this.Invoke(new MethodInvoker(() => { txtMessage.Text = ""; })); int i = 0; while (i < 10) { string str = DateTime.Now + ":" + i + "\r\n"; // 简单代码直接写代理 txtMessage.Invoke(new MethodInvoker(delegate() { this.txtMessage.Text += str; })); /////或者使用如下方法,显示声明代理 //SetText(str); Thread.Sleep(1000); i++; } btnTest.Invoke(new MethodInvoker(delegate() { btnTest.Enabled = true; })); //this.Invoke(new MethodInvoker(() => { btnTest.Enabled = true; })); /* this.Invoke(new MethodInvoker(() => { btnTest.Enabled = false; txtMessage.Text = ""; int i = 0; while (i < 10) { string str = DateTime.Now + ":" + i + "\r\n"; // 简单代码直接写代理 txtMessage.Invoke(new MethodInvoker(delegate() { this.txtMessage.Text += str; })); /////或者使用如下方法,显示声明代理 //SetText(str); Thread.Sleep(1000); i++; } btnTest.Enabled = true; })); */ }
}
线程间操作无效: 从不是创建控件的线程访问它
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。