我在调试别人代码时,遇到异步调用的问题,产生的现象如题所描述。
在异步代码之前是用process.start(一个bat文件,该文件连接远程主机,并传文件过去),如果文件打开了,则执行异步代码。
特别不解得是:当我在本地写个cs文件直接调这个方法时,是可以正常运行的,能把文件传出去,但是当我把这段代码用一个webservice的方法去调用,并另写一个client调这个webservice的时候,waitall就超时,EndInvoek也没反应,有没有人知道怎么回事?看了两天资料了 也没头绪 ,请大家帮忙看下,下面贴段代码//委托定义
private delegate string StringDelegate();//异步的部分代码,start方法打开的是一个bat文件
if (shellProcess.Start())
{
StringDelegate outputStreamAsyncReader = new StringDelegate(shellProcess.StandardOutput.ReadToEnd);
StringDelegate errorStreamAsyncReader = new StringDelegate(shellProcess.StandardError.ReadToEnd);
IAsyncResult outputAR = outputStreamAsyncReader.BeginInvoke(null, null);
IAsyncResult errorAR = errorStreamAsyncReader.BeginInvoke(null, null); WaitHandle[] arWaitHandles = new WaitHandle[2] { outputAR.AsyncWaitHandle, errorAR.AsyncWaitHandle };
WaitHandle.WaitAll(arWaitHandles, dieAfterSeconds * 1000, false);
if (shellProcess.HasExited)
exitCode = shellProcess.ExitCode;
else
exitCode = -1;
error = errorStreamAsyncReader.EndInvoke(errorAR);
output = outputStreamAsyncReader.EndInvoke(outputAR);
}
在异步代码之前是用process.start(一个bat文件,该文件连接远程主机,并传文件过去),如果文件打开了,则执行异步代码。
特别不解得是:当我在本地写个cs文件直接调这个方法时,是可以正常运行的,能把文件传出去,但是当我把这段代码用一个webservice的方法去调用,并另写一个client调这个webservice的时候,waitall就超时,EndInvoek也没反应,有没有人知道怎么回事?看了两天资料了 也没头绪 ,请大家帮忙看下,下面贴段代码//委托定义
private delegate string StringDelegate();//异步的部分代码,start方法打开的是一个bat文件
if (shellProcess.Start())
{
StringDelegate outputStreamAsyncReader = new StringDelegate(shellProcess.StandardOutput.ReadToEnd);
StringDelegate errorStreamAsyncReader = new StringDelegate(shellProcess.StandardError.ReadToEnd);
IAsyncResult outputAR = outputStreamAsyncReader.BeginInvoke(null, null);
IAsyncResult errorAR = errorStreamAsyncReader.BeginInvoke(null, null); WaitHandle[] arWaitHandles = new WaitHandle[2] { outputAR.AsyncWaitHandle, errorAR.AsyncWaitHandle };
WaitHandle.WaitAll(arWaitHandles, dieAfterSeconds * 1000, false);
if (shellProcess.HasExited)
exitCode = shellProcess.ExitCode;
else
exitCode = -1;
error = errorStreamAsyncReader.EndInvoke(errorAR);
output = outputStreamAsyncReader.EndInvoke(outputAR);
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货