1
我在寫一個庫來控制TCP上的應用程序。連接是異步處理的,所以我向通信類中添加了一個事件來指示已收到消息。避免需要Dispatcher.BeginInvoke
public event EventHandler<MessageRecievedEventArgs> MessageRecieved;
但是,當我提出事件中的主類的事件處理程序執行TCP線程不能在主線程中的事件處理程序。
如何避免要求用戶通過調用?更新GUI?
private void MessageRecieved(object sender, MessageRecievedEventArgs e)
{
Dispatcher.BeginInvoke((Action)(()=> { textBox1.Text = e.Message; }));
}
簡短的回答,你不能eas ily做那個。如果您使用的是WPF,則需要在UI線程上運行該任務,因此也是調度程序。關於程序結構的一些細節將會很有用,對於你想要做什麼的更詳細的解釋也是有用的。 – Alex
您一定希望在UI線程上發生UI更新,並且您不希望庫知道您的UI線程。你可以做的是找到一個優雅的方式來彌合他們。什麼讓你擔心你現在這樣做? –
@Ycoub Massad對我來說似乎很麻煩,要求用戶放入使用Dispatcher的開銷。 –