.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{  // 原先寫好動作的部分

             }
          }
          這樣就沒啥問題了


全站熱搜

changyy 發表在 痞客邦 留言(1) 人氣()