さまざまなテスト ステーションから python スクリプトを実行し、対応する出力パネルに出力を表示する WPF アプリを作成しています. スクリプトを並行して実行するには、タスクを使用していますが、ステーションからスクリプトを並行して実行する場合は、.他のステーションの出力も最初に開始されたステーションに取得しています。次のコードを使用しています。
private void ZmqStatusListener(string endPoint)
{
using (Context context = new Context())
{
StatusPort = string.Empty;
TestResultPort = string.Empty;
using (Socket server = context.Socket(SocketType.REP))
{
try
{
if (isStatusContextActive == false || isPortChanged == true)
{
server.Bind(endPoint);
isStatusContextActive = true;
}
}
catch (ZMQ.Exception ex)
{
if (ex.Errno != 100)
{
string IPCPort = _globalParameters.GlbParam.GlbParamIpcStartPort;
if (IPCPort == string.Empty)
{
IPCPort = "0";
}
if (endPoint == EditorConstants.PortAddress.PortPrefix + IPCPort)
{
StatusPort = endPoint;
TestReultError = EditorConstants.CommonMessageTypes.TestReultError + ex.Message + EditorConstants.CommonMessageTypes.StackTraceMessage + ex.StackTrace;
}
StopExecOfScript(default(object));
isCancelledtask = true;
ScriptStatusDesc = new ScriptStatusDesc()
{
Status = "Failed",
statusDescription = "Failed"
};
}
}
while (true)
{
string message = server.Recv(Encoding.UTF8);
UpdateTestResults(message);
server.Send(" ACK", Encoding.UTF8);
// if (message == "Test Passed")
//break;
}
}
}
}
テスト目的で、Python スクリプトに保持したテスト メッセージに基づいて、このコードの while ループを中断しています。その後、それぞれのステーションで出力を正しく取得できますが、この方法では同期方式でしか実行できません。テストステーションを並行して実行する必要があり、応答をリッスンする必要があるため while ループが壊れてはならないため、これは望ましくありません。