Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# while循环或thread.Sleep是否阻止可能引发的事件?_C#_.net_Events - Fatal编程技术网

C# while循环或thread.Sleep是否阻止可能引发的事件?

C# while循环或thread.Sleep是否阻止可能引发的事件?,c#,.net,events,C#,.net,Events,在我的代码中,我使用的是mqtt客户机,当收到消息时,会引发事件处理程序,并将消息存储在列表中 private void MqttBroker_MqttMessagePublishedReceived(object sender, Events.MqttMessageEventArgs e) { _logger?.Information($"MqttBroker_MqttMessagePublishedReceived - message rec

在我的代码中,我使用的是mqtt客户机,当收到消息时,会引发事件处理程序,并将消息存储在列表中

private void MqttBroker_MqttMessagePublishedReceived(object sender, Events.MqttMessageEventArgs e)
        {
            _logger?.Information($"MqttBroker_MqttMessagePublishedReceived - message received by the watcher {e}");
            try
            {
                if (e?.Payload != null)
                {
                    _messages.AddMessage(e.Payload);
                }
            }
            catch (Exception ex)
            {
                _logger?.Error($"MqttBroker_MqttMessagePublishedReceived - Something went wrong: {ex}");
            }
        }
同时,我正在另一个函数中等待x分钟,该函数有一个while循环。这应该用另一种方法来完成,但目前我让它停止。但我现在的问题是。这个while循环是否可能阻止正在引发的事件?所以mqtt代理在我处于while循环时发布消息

我的第二个问题是,我让我的线程休眠x分钟,而不是一个while循环。事件是否仍会引发,消息是否仍会存储在我的列表中

提前谢谢你

视情况而定


如果您的事件在另一个线程中调用,则不会有任何问题,但如果您的EventThread和LoopThread相同,则事件不会被“吸入”它将等待while循环结束,然后它将触发事件,假设
MqttBroker\u MqttMessagePublishedReceived
在其自己的线程上发布,则可能不会。然而,如果轮询线程没有睡眠,你将破坏你的CPU,如果你不采取预防措施,你肯定会有线程安全问题,最后你可能会阻塞一些其他线程,这可能是UI。它几乎可以保证有一个更好、更有效的方法谢谢你的回答,有没有一种方法可以做到这一点而不冒错过事件的风险?所以基本上,事件不能“错过”,它们将被调用到以后的某个点。所以不要害怕