我在後臺工作線程上調用一個函數,它需要ListBox
作爲初始化主線程的參數傳遞。我使用下面的代碼做後臺工作線程中的函數調用只有在主線程執行完成後才能執行?
private void simpleButton1_Click(object sender, EventArgs e)
{
bw.RunWorkerAsync();
GetData()
}
void bw_DoWork(object sender,DoWorkEventArgs e)
{
this.Invoke(new MethodInvoker(delegate
{
ShowLoadingPanel(listBox);
}));
}
private void GetData()
{
for (int i = 0; i < 500000; i++)
{
datatable.Rows.Add(new object[] { "raj", "raj", "raj", i });
}
}
void ShowLoadingPanel(Control control)
{
//Doing some work here
}
問題是,ShowLoadingPanel
函數調用GetData
函數執行完畢之後。我希望這兩個函數在不同的線程中並行運行。
我該怎麼做?
爲什麼使用'BackgroundWorker'如果您在UI線程所有的工作嗎? –
GetData和ShowLoadingPanel都在UI線程上運行。它一次只能做一件事。這裏經典的錯誤是你正在倒退。它應該是你在工作中運行的GetData()。離開UI線程顯示「加載面板」。 –
@HansPassant我知道,做它的逆向會做伎倆。但我的應用程序中沒有網格。我是否需要爲後臺的所有數據檢索來顯示加載面板。這就是爲什麼我正在尋找不同 –