如何确保事件在发生错误之前已停止

时间:2019-06-01 15:54:26

标签: c# events

我从下面的代码中收到此错误“由于线程退出或应用程序请求,I / O操作已中止”。

if (SkyQueue.IsRunning){
 _mediatimer.Tick -= UpdateSkyEvent;
 _mediatimer?.Stop();
 _mediatimer?.Dispose();
 SkyQueue.Stop();
 SkySystem.ConnectSerial = false;}

如果我添加秒表,则不会发生错误。

if (SkyQueue.IsRunning){
 _mediatimer.Tick -= UpdateSkyEvent;
 _mediatimer?.Stop();
 _mediatimer?.Dispose();
 var sw = Stopwatch.StartNew();
 while (sw.Elapsed.TotalMilliseconds < 1000)
 {
 }
 sw.Stop();
 SkyQueue.Stop();
 SkySystem.ConnectSerial = false;}

SkyQueue运行一个阻塞队列,该阻塞队列运行命令到串行端口,并将结果放入ConcurrentDictionary中,UpdateSkyEvent会提取结果。在这里,我试图关闭所有设备,并断开与端口的连接。我的猜测是,当我停止SkyQueue时,UpdateSkyEvent仍在运行,因此我得到了错误。秒表似乎给了端口足够的时间来回复上一个事件并最终停止。添加秒表似乎很容易。有没有更好的方法来找出上一个事件是否真正结束?

0 个答案:

没有答案