我在UI上遇到跨線程問題。我已經閱讀了所有的方法來實現它,並且已經實現了它們,如下所示。跨線程UI
public void UpdateList(object obj)
{
// do we need to switch threads?
if (listBox1.InvokeRequired)
{
MethodInvoker del =() => UpdateList(obj);
this.Invoke(del);
return;
}
// ok so now we're here, this means we're able to update the control
// so we unbox the object into a string
string text = (string)obj;
// and update
listBox1.Items.Add(text);
}
問題是當我嘗試做一個
hubConnection.Start().Wait();
該呼叫我試圖更新我的列表之後。
沒有等待很好。當我添加Wait時,它掛在UpdateList Invoke上。沒有錯誤......它只是掛起。
我在按鈕事件中處理此調用。
hubConnection.Start()。等待()創建主線程死鎖。刪除等待和看到 – lboshuizen 2014-09-19 15:51:40
簡單的規則要記住:使用調用錯誤99%,總是使用BeginInvoke。開始一個線程並等待它是100%錯誤,根本不需要線程。使用InvokeRequired是95%錯誤,你已經知道它是從一個線程調用的。把它們寫下來,釘在牆上,讓你擺脫困境。 – 2014-09-20 11:48:42