[英]Communicate between BackgroundWorker and main thread
我想知道如何在不凍結我的UI的情況下啟動服務器連接(單擊按鈕只需2秒鍾),並且在建立連接后更新了我的UI,我可以通過BackgroundWorker
並且在worker_RunWorkerCompleted event
內部worker_RunWorkerCompleted event
更新我的UI,但是因為這是另一個線程需要使用Invoke
:
private void btnConnect_Click(object sender, EventArgs e)
{
btnConnect.Enabled = false;
BackgroundWorker worker = new BackgroundWorker();
worker.RunWorkerCompleted += worker_RunWorkerCompleted;
worker.DoWork += worker_DoWork;
worker.RunWorkerAsync();
}
開始工作並連接:
private void worker_DoWork(object sender, DoWorkEventArgs e)
{
try
{
// Establish the connection...
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
建立連接后,更新我的UI:
private void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
// Update UI
}
我的問題是我可以避免使用invoke嗎? 因為在我的應用程序中,我需要添加,刪除,更新標簽,DatagridView幾個要點,因此我將多次使用Invoke
,這是常見的做法嗎? 有一種方法可以在其他線程中啟動某項,並且在此線程結束后仍保留在主線程中?
你不需要Invoke
下面的回調:
ProgressChanged
RunWorkerCompleted
在這里,您可以直接訪問UI元素而不會出現問題。 其余的需要Invoke
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.