2008年1月16日 星期三

[C#] 跨執行緒作業無效: 存取控制項 'xxx' 時所使用的執行緒與建立控制項的執行緒不同

    .NET 2005 的 Thread 比較嚴格  不能隨意存取其他 Thread 的資料
    看網路上找到的資料聽說 .NET 2003 是 ok 的


      其錯誤訊息:


        跨執行緒作業無效: 存取控制項 'xxx' 時所使用的執行緒與建立
        控制項的執行緒不同。


    至於用來解決的方式有  BackgroundWorker  等相關技術
    但由於我的目的是要變動 winform 裡頭的東西  不太ok
    最後摸到一個方法:


        http://www.purecs.net/thread/topic736_1.aspx


    簡敘:

        Step 1:


          在 form 中請多添加以下這個 member
          private delegate void InvokeUpdateState(string state); // 依需求


        Step 2:


          要透過 Thread 做動作的東西
          如 event handler 會 call 到的那支 function
          對那支 function 做一些調整


          ex:


          private void show( string k ){
             if( this.form元件.InvokeRequired ){
               this.Invoke(
                 new InvokeUpdateState(this.show) , new object[]{k}
               );
             }else{  // 原先寫好動作的部分


             }
          }
          這樣就沒啥問題了



沒有留言:

張貼留言