C# 最小化应用程序会影响ManualResetEvent.WaitOne()?

C# 最小化应用程序会影响ManualResetEvent.WaitOne()?,c#,wpf,multithreading,C#,Wpf,Multithreading,这有点奇怪。我的应用程序将数据绘制在图表上,与每秒从外部硬件设备接收的“信号”同步。无论何时接收到信号,都会在图表上绘制一个新点 非常简化的伪代码: while (true) { _mre.WaitOne(1000); PlotPointOnChart(); } private void SignalReceived(object sender, EventArgs e) { _mre.Set(); _mre.Reset(); } 后台任务负责轮询设备(大约每

这有点奇怪。我的应用程序将数据绘制在图表上,与每秒从外部硬件设备接收的“信号”同步。无论何时接收到信号,都会在图表上绘制一个新点

非常简化的伪代码:

while (true)
{
    _mre.WaitOne(1000);

   PlotPointOnChart();
}

private void SignalReceived(object sender, EventArgs e)
{
    _mre.Set();
    _mre.Reset();
}
后台任务负责轮询设备(大约每100ms一次),并在收到“信号”时引发事件

应用程序通常工作正常,但如果我将窗口最小化一两秒钟,然后将其恢复,而不是在图表上看到一个或两个新点,那么可能会有十几个或更多的新点。我能想到的唯一一件事是
ManualResetEvent
在某种程度上受到最小化应用程序的影响

不确定它是否相关,但“while”循环在后台任务上运行,从使用

await Task.Run(() => ...);

所以你看到了很多点,但是它们是从哪里来的呢?我的意思是,如果设备真的产生1点甚至每秒。@Evk它会绘制一个从这个设备读取的值,它在每个“信号”后都会改变。当我还原然后最小化时,这十几个新点都有相同的值,几乎感觉MRE在最小化窗口时不知何故陷入了“设置”状态,允许循环重复绘制相同的值,而不是等待信号指示新值已准备就绪。我真的看不出最小化窗口会对这样的事情产生什么影响,所以我的问题可能出在其他地方。也许你可以提供更多的代码,根据当前的代码很难得出任何结论。我也不认为最小化会影响事件,这意味着SignalReceived可能会由于某种原因被重复调用,但您并没有提供任何与调用方式相关的代码。