从C#对RPG程序的调用是否同步?

时间:2019-06-28 14:33:26

标签: c# ibm-midrange rpg

我的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程序的结果?

2 个答案:

答案 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)

是的,通话是同步的。

链接到的文档与客户端PC上的Active X组件无关。

作为较旧的 IBM i Access Windows版安装或较新的 Access Client Solution-Windows应用程序包的一部分,您应该具有程序员工具包 >已安装选件。

其中记录了ActiveX组件 enter image description here