c#如何跨线程调用窗体控件
生活随笔
收集整理的這篇文章主要介紹了
c#如何跨线程调用窗体控件
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
public?partial?class?Form1?:?Form
????{
????????public?Form1()
????????{
????????????InitializeComponent();
????????????//方法1:不進(jìn)行跨線程安全檢查
????????????//System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls?=?false;
????????}
???
????????private?void?button1_Click(object?sender,?EventArgs?e)
????????{
????????????Thread?th1?=?new?Thread(new?ThreadStart(CalNum));
????????????th1.Start();
????????}
???
????????private?void?CalNum()
????????{
????????????//button1.Enabled?=?false;
???
????????????int?result?=?0;
????????????for?(int?i?=?1;?i?<?100000000;?i++)
????????????{
????????????????result?+=?i;
????????????}
???
????????????SetCalResult(result);
???
????????????//button1.Enabled?=?true;
????????}
???
????????//方法2:檢查是否跨線程,然后將方法加入委托,調(diào)用委托
????????public?delegate?void?SetTextHandler(int?result);
????????private?void?SetCalResult(int?result)
????????{
????????????if?(label2.InvokeRequired?==?true)
????????????{
????????????????SetTextHandler?set?=?new?SetTextHandler(SetCalResult);//委托的方法參數(shù)應(yīng)和SetCalResult一致
????????????????label2.Invoke(set,?new?object[]?{?result?});?//此方法第二參數(shù)用于傳入方法,代替形參result
????????????}
????????????else
????????????{
????????????????label2.Text?=?result.ToString();
????????????}
????????}
????}
總結(jié)
以上是生活随笔為你收集整理的c#如何跨线程调用窗体控件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何高效、可移植申请内存代码。
- 下一篇: C++主流预处理,编译和链接过程