【发布时间】:2012-02-17 21:55:14
【问题描述】:
我有两个进程:一个是 GUI,另一个是 CUI。 它们每个都托管一个简单的 WCF 服务,并通过名称管道相互通信。
GUI 应用程序中有两个按钮和一个进度条。
“开始运行”按钮告诉 CUI 运行任务 30 秒。 CUI 将其进度报告回 GUI,因此可以更新进度条。 “打印”按钮告诉 CUI 打印一个字符串。
现在如果我们按下“打印”按钮几次,没关系,CUI 将打印字符串:
然后,如果我按下“开始运行”按钮,CUI 会将进度打印到控制台并将进度报告回 GUI,并且进度条会更新:
然后我可以再按几次“打印”按钮,它就可以了:
这一切看起来都很好。
但是如果我重新启动这两个进程,然后先单击“开始运行”按钮,然后单击“打印”按钮,那么两个进程都会被冻结:
看起来像是线程问题。
所以看起来如果我从单击打印按钮开始,那么一切正常。 但是如果我从点击开始运行按钮开始,那么就会出现死锁。 这是为什么呢?
您可以从这里下载此示例:http://files.cnblogs.com/cuipengfei/SampleForStackOverflow.zip
【问题讨论】:
标签: .net multithreading wcf ipc named-pipes