c#使用MethodInvoker解決跨線程訪問控件


 
 
 
.net 原則上禁止跨線程訪問控件,因為這樣可能造成錯誤的發生,有一種方法是禁止編譯器對跨線程訪問作檢查,Control.CheckForIllegalCrossThreadCalls = false;可以實現訪問,但是出不出錯不敢保證C#跨線程訪問控件運行時錯誤。

使用MethodInvoker即可解決:

原代碼:

         private void btnOK_Click(object sender, EventArgs e)
         {
             tslInfo.Text = "請稍候...";
             Thread td = new Thread(new ThreadStart(run));
             td.Start();
         }

         /// <summary>
         /// 線程方法
         /// </summary>
         private void run()
         {
             this.tslInfo.Text = "就緒";
         }


修改后:
         private void btnOK_Click(object sender, EventArgs e)
         {
             tslInfo.Text = "請稍候...";
             Thread td = new Thread(new ThreadStart(threadRun));
             td.Start();
         }

         /// <summary>
         /// 原線程方法
         /// </summary>
         private void run()
         {
             this.tslInfo.Text = "就緒";
         }

         /// <summary>
         /// 線程方法
         /// </summary>
         private void threadRun()
         {
             MethodInvoker In = new MethodInvoker(run);
             this.BeginInvoke(In);
         }

 

 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM