我想知道如何在不冻结我的 UI 的情况下启动我的服务器连接(只需单击 2 秒的简单按钮),并且在建立连接后更新我的 UI,我可以通过BackgroundWorker
和内部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
}
我的问题是我可以避免使用调用吗?因为在我的应用程序中,我有几个点需要添加、删除、更新标签、DatagridView,这样我会多次使用Invoke
,这是一种常见且正确的做法吗?有一种方法可以在不同的线程中启动某些东西,并且在该线程结束后保留到主线程?