我正在开发一个类似于工作流应用程序的应用程序,请将其想象为计算机零件组装应用程序。在第一工位组装键盘,在第二工位组装鼠标,在第三工位组装主板(有10个工位)。
为识别操作员必须组装的零件,数据被发送到PLC,PLC依次打开每个包含组装零件的工具箱的灯。然后,操作员扫描装配零件并将数据通过PLC发送到我们的应用程序。
此应用程序用于查看所有电台的状态。每个站都有以下步骤:
我有两个问题:
A。我们有一个用例,其中用户想要检查要在UI中组装的零件。因此,在用户界面中,我们包含3个组件:
当用户单击“查看装配零件”时,他想查看装配零件列表。如果需要显示装配零件,那么我们可以从数据库中为每个工作站提取数据并进行显示,但是这里要技巧,因为每个工作站的操作步骤都在单独的线程中运行,如何更新弹出窗口(可能是在单独的线程中运行)呼叫callAsyncProcess
)。
B。我想在单独的线程中运行每个工作站操作,下面的代码对吗?在callAsyncProcess
中,我正在调用单独的线程,我不想在调用另一个任务之前等待该任务完成,但是我想在某个时间后超时,callAsyncProcess
中的代码对吗?>
下面是操作代码
public async void callAsyncProcess(Label label, Label prevStationLabel, int stationId, string scannedBarCode, ushort startCmdadr, ushort refAdr)
{
var task =automaticStepsTask(label, prevStationLabel, stationId, scannedBarCode, startCmdadr, refAdr);
if (Task.WhenAny(task, Task.Delay(timeout)) == task)
{
// task completed within timeout
}
else
{
Console.WriteLine("timeout for station "+stationId);
}
Console.WriteLine("AUTOMATIC STEP COMPLETED "+stationId);
}
public Task automaticStepsTask(Label label, Label prevStationLabel, int stationId, string scannedBarCode, ushort startCmdadr, ushort refAdr)
{
return Task.Run(() =>
{
// other operation
scanChildNOk(staionId,scannedBarcode,Childlist);
});
}
void scanChildNOk(int stationId, string stationModelName, List<string> childCompList)
{
// operation related to scanning
// need to update ui from here
}
我需要在以上代码中使用await
关键字吗?