C# 从不是创建控件 的线程访问它
有两种方式解决
1.在窗体构造函数中写Control.CheckForIllegalCrossThreadCalls =false;
2.使用Invoke等委托函数。
问题原因是。net2.0以后拒绝多线程访问空间,避免空间造成死锁。以前Control.CheckForIllegalCrossThreadCalls =false;默认就是这样,现在默认为true。
如果不会好几个线程同时操作一个控件用方法1就可以。如果存在多个线程一起操作控件使用方法2
例如: this.progressBar1.Maximum = max;
改为:this.setMaxProcess(_totalFrames);
private delegate void MyDelegate(int maxnum); private void setMaxProcess(int max) { if (this.progressBar1.InvokeRequired) { MyDelegate del = new MyDelegate(setMaxProcess); this.Invoke(del, new object[] { max }); } else this.progressBar1.Maximum = max; }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。