从 C# 调用 RPG 程序是否同步?
Is a call to a RPG program from C# synchronous or not?
我的 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 程序的结果?
您可以使用 WaitHandle class 来确保您的代码阻塞,直到 .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();
}
是的,调用是同步的。
您链接到的文档与客户端 PC 上的 Active X 组件无关。
作为较旧的 IBM i Access for Windows 安装的一部分或较新的 Access 客户端解决方案 - Windows 应用程序包 您应该安装 Programmer's Toolkit 选项。
那里记录了 ActiveX 组件
我的 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 程序的结果?
您可以使用 WaitHandle class 来确保您的代码阻塞,直到 .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();
}
是的,调用是同步的。
您链接到的文档与客户端 PC 上的 Active X 组件无关。
作为较旧的 IBM i Access for Windows 安装的一部分或较新的 Access 客户端解决方案 - Windows 应用程序包 您应该安装 Programmer's Toolkit 选项。
那里记录了 ActiveX 组件