我在windows窗體應用程序上有一個datagridview。從c中的線程更新datagridview行#
應用程序將所有顯示的數據發佈到外部網站。網站返回碼,以便應用發佈數據的detrmine狀態。
我需要創建一個參數化線程,將行索引作爲參數,併發布行數據並通過返回值進行更新。 (這可能涉及更改行背景顏色和更改列值)
這有可能是我認爲的方式嗎?還是有更好的辦法?
我在windows窗體應用程序上有一個datagridview。從c中的線程更新datagridview行#
應用程序將所有顯示的數據發佈到外部網站。網站返回碼,以便應用發佈數據的detrmine狀態。
我需要創建一個參數化線程,將行索引作爲參數,併發布行數據並通過返回值進行更新。 (這可能涉及更改行背景顏色和更改列值)
這有可能是我認爲的方式嗎?還是有更好的辦法?
那麼,由於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();
的方法,另外可以使用回地面工作者線程,以防止交叉線程異常。
Regards