码迷,mamicode.com
首页 > 编程语言 > 详细

C# 从不是创建控件 的线程访问它

时间:2015-04-27 15:33:13      阅读:156      评论:0      收藏:0      [点我收藏+]

标签: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;
        }


C# 从不是创建控件 的线程访问它

标签:c#

原文地址:http://studybao.blog.51cto.com/1772164/1638997

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!