背景
我有用C#编写的网络应用程序。我的服务器程序有一个UI和几个通信线程,它们从tcp套接字读取并在控制器UI上显示消息。使用BeginInvoke时无响应的UI
与每个客户端的通信是通过一个分离线程完成的。当我从一个客户端接收到一些消息流时,该客户端的线程在UI上写入,这是一个Form上的richtextbox。
我调用窗体的SetTextHelper(string text)方法。
它看起来像这样
private delegate void MyTextUpdateHandler(string text);
public void SetTextHelper(string text)
{
BeginInvoke(new MyTextUpdateHandler(SetText), new object[] { text });
}
public setText(string text)
{
richtext.Text+= text;
}
问题
- 如果我使用的BeginInvoke我的UI是,当我写的大量数据流UI 完全反应迟钝 - 调用解决了这个问题,但我读了对于多线程环境,其中有许多共享资源共享相同的资源Invoke可能导致死锁我在大约16个线程之间共享公共的ichtextbox - 对我的情况来说,什么是好的设计?
请注意,他不是追加。 – SLaks 2010-03-24 19:38:21
@SLaks:尽管他可以在调用SetTextHelper的代码中追加。目前基本上还不清楚UI为什么没有响应,但我怀疑它只是超载了数据。 – 2010-03-24 19:39:21
是的,我将数据附加到richtextbox。但我很困惑为什么Invoke使它正常工作,而BeginInvoke不是?每次添加到富文本框中的文本都很小,但大约有64个字符 – Kazoom 2010-03-24 21:10:37