9. 上面的代码会报错,从新的线程访问其他线程的控件:这是因为.NET禁止了跨线程调用控件, 否则谁都可以操作控件,最后可能造成错误。 1:线程间操作无效: 从不是创建控件的线程访问它。那么创建它的线程是哪个线程? (百度答案)从程序设计上来说,只有创建界面的主线程才能访问界面上的控件,所以会出错. 当然,设置Check...
第四种办法: 使用BackgroundWorker组件(推荐使用这个方法) BackgroundWorker是.NET里面用来执行多线程任务的控件,它允许编程者在一个单独的线程上执行一些操作。耗时的操作(如下载和数据库事务)。用法简单 private void button4_Click(object sender, EventArgs e) { using (BackgroundWorker bw = new BackgroundWorke...
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(){ //异步外的⽅法...
先说结果,该方案并不能解决跨线程操作UI引起的问题,例如,Invoke如果是发生在另外一个线程,而Ulogin_OnLoginSuccessHandler中有涉及到更新窗口的代码,则也是照常会引起该错误的。 正确的方案有几种,网上可以查找一下,这里我仅介绍我亲测有效,而且也比较简便的一种,就是利用窗体或者控件本身的Invoke方法来调用; 例如,...
一种是通过设置System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls=false;(winform下)如果在你的程序初始化的时候设置了这个属性,而且在你的控件中使用的都是微软Framework类库中的控件的话,系统就不会再抛出你上面所说的这个错误了。当然这只是为了将VS2003的代码转换到VS2005下所使用的一种常见的方法。
线程间操作无效: 从不是创建控件的线程访问它 a(this.ViewModel.WhenAnyValue(m => m.Datas).Subscribe(Datas =>{try{#region法一//new Thread(() =>//{//for (int i = 0; i < Datas.Rows.Count; i++)//{//Action<int> c = new Action<int>(Action2Test);//Invoke(c, i);//}//})....
c线程间操作无效解决方法教育 系统标签: 无效操作控件解决方法代码 c#线程间操作无效解决方法c#线程间操作无效解决方法c#线程间操作无效解决方法码是在VS2003中的话应该不会抛出这个异常,只有在使用VS2005的时候,如果你从非创建这个控件的线程中访问这个控件或者操作这个控件的话就会抛出这个异常。这是微软为了保证线程安全...
简易解决办法: 主窗体代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 usingSystem; usingSystem.Collections.Generic; usingSystem.ComponentModel; usingSystem.Data; usingSystem.Drawing; usingSystem.Linq; ...
d = new SetTextCallback(SetText); this.Invoke(d, new object[] { text }); } else { this.textBox1.Text = text; } } 这里主要用到了.NET中的 delegate。另外如果线程AB只负责将数据保存在全局变量里,用一个有操作权限的C(主界面搞个timer)调用这些数据并显示在界面上就没问题了。
d = new SetTextCallback(SetText); this.Invoke(d, new object[] { text }); } else { this.textBox1.Text = text; } } 这里主要用到了.NET中的 delegate。另外如果线程AB只负责将数据保存在全局变量里,用一个有操作权限的C(主界面搞个timer)调用这些数据并显示在界面上就没问题了。