在C#控制台应用程序中等待单向WCF调用完成

4
我有一个WCF webservice(不在我的控制范围内),它实现了我需要通过IsOneWay=true + 回调接口访问的功能之一。回调接口的其中一个方法通知处理完成。由于最初设计用于从GUI中访问,因此被编写成这种方式。
然而,我需要从控制台应用程序中访问同一方法以供批处理使用。目前我粗略地实现这一点的方法是将标志设置为false,并在调用WCF方法后实现一个while循环,其中包含一个简短的Thread.Sleep()调用。这显然可以工作,但似乎是实现最终结果的一种非常糟糕的方式。
我想知道正确的做法是什么。注意:服务不在我的控制范围内,尽管我可以轻松地通过IDE添加引用,但我可以很容易地创建代码实现等。
1个回答

4

使用ManualResetEvent等待完成。在服务上调用单向异步方法,然后等待手动重置事件对象。在回调函数中调用Set()方法,这将允许您的主线程在WaitOne()调用之后继续执行,如下所示:

var waitHandle = new ManualResetEvent();

yourwcfObject.CallTheOneWayMethod();
waitHandle.WaitOne();


void CallbackMethodRaisedByWCFService()
{
    waitHandle.Set();
}

2
@anonymouse:看看ManualResetEvent.WaitOne重载吧。你甚至可以设置超时时间,以防止应用程序在出现错误时永远等待。 - Stephan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接