我有一个长期的C#.NET 3.5应用程序“冻结”,我很茫然。有两个C#可执行文件。一个有完整的UI,另一个作为托盘应用程序运行。他们都通过WCF与第三个服务应用进行通信,该应用也在托盘中运行。调试阻塞的Windows消息循环的想法
随机主Winforms应用程序的UI线程将死锁。神秘的是,如果我退出托盘应用程序,这个应用程序的用户界面将解锁。
每当我将调试器连接到任一应用程序时,我什么都不会有用。 UI线程在Application.Run方法的冻结应用程序中被阻止。所有其他线程或者正在休眠,或者在调用UI线程时被阻塞。
神秘地另一个像Photoshop一样运行的应用程序会表现出奇怪的行为,而这种僵局已经到位。退出托盘应用也会对此进行分类。
我可以推论的是,主要的Windows级别的消息泵出了问题,但我并不真正了解如何进一步调试。我已经安装了框架源代码,可以看到胶着应用是停留在一个while循环中:
Application.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop
,但真的不知道够做任何事此信息。
有没有人有任何建议在哪里看得更远?我一直在追逐这个随机的僵局错误数月。
感谢, 尼克
该问题可能与WCF有关。你如何主办服务?你使用双工通信吗? – 2010-10-12 12:16:25
是的,我们正在使用双工WCF。我们刚刚将代码移植到了.NET 4中,但仍然看到了这个问题,尽管不太经常。 随着WCF我做一些事情,使每个连接都有它自己的实例: [ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple,UseSynchronizationContext =假,InstanceContextMode = InstanceContextMode.PerSession)] 和回调普遍得到放入排队系统,所以他们不应该阻止。即使没有发生回调或服务调用,这个问题似乎也会发生,除了可能每5分钟发生一次“保持活跃”的Ping。 – Mocl 2010-11-02 10:12:08