【发布时间】:2013-01-16 21:34:39
【问题描述】:
我在使用带有 2 个线程的 Winforms 应用程序时遇到问题:在第二个线程中,我从 WCF 服务中提取消息。当有消息时,我需要更新 GUI:我按照How to update the GUI from another thread in C#? 此处找到的模式执行此操作。这是代码:
private delegate void CWU(int ID);
public void AddNewTab(int id)
{
if (this.tabControl1.InvokeRequired)
{
CWU cb = new CWU(AddNewTab);
this.tabControl1.Invoke(cb,id);
}
else
{
User ToChatWith = ContactsHelper.AllFriends.Find(e => e.ID == id);
tabpage.Text = ToChatWith.ToString();
this.tabControl1.TabPages.Add(tabpage);
this.tabControl1.SelectTab(tabpage);
}
选项卡已正确添加,当我们离开此方法时,应用程序没有响应,调试中没有信息。添加此选项卡后运行我的应用程序时,我得到 AppHangB1 没有任何详细信息。你能帮帮我吗?
【问题讨论】:
-
AddRTB 是做什么的?您是说 AddNewTab 吗?
-
这是一个旧代码,它是 CWU cb = new CWU(AddNewTab); ,对不起
-
您多久从另一个线程调用 AddNewTab?考虑激活异常(菜单 Debug/Exceptions)并查看是否抛出任何异常。
-
只有在没有标签的用户有新消息时。在我的测试中,每次运行只调用一次。
-
tabpage是在哪里创建的?可以多次添加吗?另外,假设需要一些时间来处理,在工作线程而不是 GUI 线程中创建 ToChatWith 不是更好吗?
标签: c# winforms multithreading