Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
等待在C#控制台应用程序中完成单向WCF调用_C#_Wcf_Thread Sleep_Isoneway - Fatal编程技术网

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

等待在C#控制台应用程序中完成单向WCF调用,c#,wcf,thread-sleep,isoneway,C#,Wcf,Thread Sleep,Isoneway,我有一个WCF webservice(不在我的控制之下),它实现了我需要通过IsOneWay=true+回调接口访问的功能,回调接口是通知处理完成的方法之一。它是以这种方式编写的,因为它最初是为从GUI访问而设计的 但是,我需要从控制台应用程序访问相同的方法,以便在批处理中使用。目前我实现这一点的粗略方法是将标志设置为false,在调用WCF方法之后,我使用一个简短的Thread.Sleep()调用实现了一个while循环。这显然有效,但似乎是实现最终结果的一种非常糟糕的方式 我想知道这样做的正

我有一个WCF webservice(不在我的控制之下),它实现了我需要通过IsOneWay=true+回调接口访问的功能,回调接口是通知处理完成的方法之一。它是以这种方式编写的,因为它最初是为从GUI访问而设计的

但是,我需要从控制台应用程序访问相同的方法,以便在批处理中使用。目前我实现这一点的粗略方法是将标志设置为false,在调用WCF方法之后,我使用一个简短的Thread.Sleep()调用实现了一个while循环。这显然有效,但似乎是实现最终结果的一种非常糟糕的方式

我想知道这样做的正确方法是什么。注意:该服务不在我的控制范围内,虽然我可以轻松地启动代码实现等,但引用刚刚通过IDE添加。

使用等待完成。在服务上调用单向异步方法,然后等待manualresetevent对象。在回调调用中,Set()方法将允许主线程在WaitOne()调用后继续执行,如下所示:

var waitHandle = new ManualResetEvent();

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


void CallbackMethodRaisedByWCFService()
{
    waitHandle.Set();
}
@匿名者:看看这个。您甚至可以设置超时,以防止应用程序在出现错误时永远等待。