WinForm中如何使用多线程操作控件

然而我们并不能用传统方法来做这个问题,下面我将详细的介绍。
首先来看传统
【菜科解读】
然而我们并不能用传统方法来做这个问题,下面我将详细的介绍。
首先来看传统方法:publicpartialclass Form1 : Form ...{ public Form1() ...{ InitializeComponent(); }privatevoid Form1_Load(object sender, EventArgs e) ...{ Thread thread =new Thread(ThreadFuntion); thread.IsBackground =true; thread.Start(); }privatevoid ThreadFuntion() ...{ while (true) ...{ this.textBox1.Text = DateTime.Now.ToString(); Thread.Sleep(1000); }}}运行这段代码,我们会看到系统抛出一个异常:Cross-thread operation not valid:Control 'textBox1' accessed from a thread other than the thread it was created on . 这是因为.net 2.0以后加强了安全机制,不允许在winform中直接跨线程访问控件的属性。
那么怎么解决这个问题呢,下面提供几种方案。
第一种方案,我们在Form1_Load()方法中加一句代码:privatevoid Form1_Load(object sender, EventArgs e) ...{ Control.CheckForIllegalCrossThreadCalls =false; Thread thread =new Thread(ThreadFuntion); thread.IsBackground =true; thread.Start(); }加入这句代码以后发现程序可以正常运行了。
这句代码就是说在这个类中我们不检查跨线程的调用是否合法(如果没有加这句话运行也没有异常,那么说明系统以及默认的采用了不检查的方式)。
然而,这种方法不可取。
我们查看CheckForIllegalCrossThreadCalls 这个属性的定义,就会发现它是一个static的,也就是说无论我们在项目的什么地方修改了这个值,他就会在全局起作用。
而且像这种跨线程访问是否存在异常,我们通常都会去检查。
如果项目中其他人修改了这个属性,那么我们的方案就失败了,我们要采取另外的方案。
下面来看第二种方案,就是使用delegate和invoke来从其他线程中控制控件信息。
网上有很多人写了这种控制方式,然而我看了很多这种帖子,表明上看来是没有什么问题的,但是实际上并没有解决这个问题,首先来看网络上的那种不完善的方式:publicpartialclass Form1 : Form ...{ privatedelegatevoid FlushClient();//代理public Form1() ...{ InitializeComponent(); }privatevoid Form1_Load(object sender, EventArgs e) ...{ Thread thread =new Thread(CrossThreadFlush); thread.IsBackground=true; thread.Start(); }privatevoid CrossThreadFlush() ...{ //将代理绑定到方法 FlushClient fc =new FlushClient(ThreadFuntion); this.BeginInvoke(fc);//调用代理}privatevoid ThreadFuntion() ...{ while (true) ...{ this.textBox1.Text = DateTime.Now.ToString(); Thread.Sleep(1000); }}} WinForm,中,如何,使用,多,线程,操作,控件,我们,
win10重装系统黑屏进不去系统的如何教程
花小猪如何重新定位
花小猪怎么重新定位?花小猪修改目的地操作教程 1、在首页上是可以选择一种交通出行方式,然后在下方手动输入目的地的;2、没有司机接单的情况下,我们是可以自由更改目的地和出发地的;3、司机已经接单并且我们已经坐上车了,也是可以修改地址的;4、点击下方的【更多操作】;5、开启重新定位或者是修改地址。
修改目的地怎么收费?平台是一口价计费,修改目的地后,系统会根据新终点的预估里程和时长以及结合您修改时的供需状况、路况等重新计算得出新的一口价费用。
计价规则遵循实惠、便捷、司乘平等原则,平台对于司乘双方均采用一口价计费规则。
一口价是以预估里程及时长,按照基础计价规则计算出预估价,再根据供需等因素做一定幅度内调整的价格。
上面就是小编为大家带来花小猪修改目的地操作教程,一起来学习学习吧。
相信是可以帮助到一些新用户的。