我的C#代码使用cwbx API调用AS400中的程序。 现在的问题是:该呼叫是否同步?我的意思是,返回代码后,如何确定被调用程序已完成其工作?
似乎被调用程序可以完成其工作,但有时速度不够快,因此这就是为什么我怀疑调用是异步的。但是我不知道cwbx.dll是如何工作的。 我查看了帮助文档http://public.dhe.ibm.com/systems/power/docs/systemi/v5r4/en_US/rpc1.pdf,但没有提到同步或异步调用。
cwbx.Program program = new cwbx.Program();
program.LibraryName = Main.GetBIBAS400();
/* ... */
program.Call(parameters);
如果呼叫是同步的,对我来说一切都很好。可能是因为API结构非常简单。 但是,如果它是异步的,我该如何编码才能等待我的RPG程序的结果?
答案 0 :(得分:0)
您可以使用WaitHandle类来确保代码阻塞,直到.dll完成处理为止。
具体来说,请查看WaitOne方法以实现此目的。下面的示例:
static void Main()
{
Console.WriteLine("Main starting.");
ThreadPool.QueueUserWorkItem(
new WaitCallback(WorkMethod), autoEvent);
// Wait for work method to signal.
if(autoEvent.WaitOne(1000))
{
Console.WriteLine("Work method signaled.");
}
else
{
Console.WriteLine("Timed out waiting for work " +
"method to signal.");
}
Console.WriteLine("Main ending.");
}
static void WorkMethod(object stateInfo)
{
Console.WriteLine("Work starting.");
// Call your external dll here
program.Call(parameters);
// Signal that work is finished.
Console.WriteLine("Work ending.");
((AutoResetEvent)stateInfo).Set();
}
答案 1 :(得分:0)