2010-08-10 122 views
0

我在windows窗體應用程序上有一個datagridview。從c中的線程更新datagridview行#

應用程序將所有顯示的數據發佈到外部網站。網站返回碼,以便應用發佈數據的detrmine狀態。

我需要創建一個參數化線程,將行索引作爲參數,併發布行數據並通過返回值進行更新。 (這可能涉及更改行背景顏色和更改列值)

這有可能是我認爲的方式嗎?還是有更好的辦法?

回答

1

那麼,由於DataGridView是一個GUI控件,您將無法從另一個線程進行更改。您將不得不將消息發送到主GUI線程。幸運的是,C#對此有很好的支持。寫的方法(可能在你的主窗體類)來完成實際的工作:

public void SetRowFromWebResult(int row, Color background, ...) 
{ 
    // ... 
} 

然後,你的線程內,使用Invoke方法窗體對象(未委託)上:

myForm.Invoke(() => myForm.SetRowFromWebResult(row, background, ...)); 

那麼想必你會運行在這樣一個線程的HTTP請求:

int row = ...; 
var myThread = new Thread(() => 
{ 
    // Fire off the request 
    var request = WebRequest.Create(...); 
    var response = ...; 

    // Calculate the parameters (e.g. row background color) 
    Color background = (response.Code == ...) ? ... : ...; 

    // Tell the GUI to update the DataGridView 
    myForm.Invoke(() => myForm.SetRowFromWebResult(row, background, ...)); 
}); 
myThread.Start(); 
0

的方法,另外可以使用回地面工作者線程,以防止交叉線程異常。

Regards