簡體   English   中英

在BackgroundWorker和主線程之間進行通信

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM