2013-04-29 45 views
1

在我的後臺工作中,它需要調用另一個類的方法來帶出參數。從BackgroundWorker調用另一個類的方法BackgroundWorker

[1級]

public partial Class1 : Form 
    { 
     private void bw_DoWork(object sender, DoWorkEventArgs e) 
     { 
      DataGridView gv; 
      int param1, param2; 

      Class2 class2 = new Class2(); 
      class2.method(gv, out param1, out param2); 
     } 
    } 

[2級]

public Class2 
    { 
     public void method(DataGridView gv, out int param1, out int param2) 
     { 
      param1 = 0; 
      param2 = 0; 

      // basically grab the data in dataGridView and load into database 
     } 
    } 

我應該如何正確地調用Class2.method沒有錯誤Cross-thread operation not valid: 'class2' accessed from a thread other than the thread it was created

+0

Class2是Windows窗體控件嗎? – Gjeltema 2013-04-29 01:09:26

+0

不,Class2只是一個普通的類 – noobie 2013-04-29 01:11:25

+0

肯定需要更多的信息。你可以發佈Class2代碼,什麼是param2和param3,以及方法有什麼作用?沒有內部原因,out參數會導致在其他線程上運行任何問題。您在那裏的代碼應該可以正常工作,假設沒有任何與任何窗體或用戶控件交互。 – Gjeltema 2013-04-29 01:15:00

回答

0

您無法編輯/修改未在其上創建線程的表單或用戶控件。爲了做到這一點,您需要從UI線程的DataGridView中提取需要的數據,並將其放入一個不是控件或表單的數據結構(如DataTable)(或傳遞它以後臺工作人員爲參數)。然後從後臺線程中的數據結構中檢索數據,並將其添加到數據庫中。

+0

好的。指出。謝謝你的幫助。 – noobie 2013-04-29 01:56:41

相關問題