在C#中,防止事件重入(即同一个事件处理器在未完成之前再次被触发)是一个常见的需求,尤其是在处理UI事件或长时间运行的操作时。以下是几种防止事件重入的方法:
4. 取消事件订阅
在事件处理器中临时取消对事件的订阅,处理完后再重新订阅。
Csharp
深色版本
private void OnSomeEvent(object sender, EventArgs e)
{
someControl.SomeEvent -= OnSomeEvent;
try
{
// 处理事件的代码
}
finally
{
someControl.SomeEvent += OnSomeEvent;
}
}
这种方法需要小心管理订阅和取消订阅的过程,以避免遗漏重新订阅导致后续事件无法触发的问题。
5. 异步等待
如果事件处理器中的操作是异步的,可以使用async/await模式,并确保每次只处理一个请求。
Csharp
深色版本
private bool _isProcessing = false;
private async void OnSomeEvent(object sender, EventArgs e)
{
if (_isProcessing)
{
return;
}
_isProcessing = true;
&

438

被折叠的 条评论
为什么被折叠?



