0
我不知道如何启动我的服务器连接(简单的按钮点击需要2秒)没有我的用户界面冻结,并建立连接后更新我的用户界面,我可以通过BackgroundWorker
和worker_RunWorkerCompleted event
内更新我的UI但因为这是不同的线程我需要使用Invoke
:BackgroundWorker和主线程之间的沟通
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
几次,这是一个常见和适当的做到这一点? 有一种方法可以在不同线程中启动某些内容,并且在此线程结束之后仍保留在主线程中?