如何防止两个事件之间的读写错误?

How to prevent read-write error between two events?

我有一个布尔值 _isTextChanged,有两个事件将在一个事件中访问这个变量 class。我有一些读写不一致,我认为这是由多线程问题引起的。但不确定如何解决这个问题。我尝试使用 Lock,但似乎无济于事。代码如下

 private void A_event(object sender, RoutedEventArgs e)
 {
    if(somecondition && !_hasTextChanged)
    {
        Dosomething();
    }
    _hasTextChanged = false;
 }


private void B_event(object sender, RoutedEventArgs e)
{
    DosomethingElse();
    _hasTextChanged = true;
}

情况是,B_event被调用一次后,A_event被调用,那么_hasTextChanged会被设置为false,但是第二次A_event被调用, _hasTextChanged 将更改为 true 而不会实际点击 B_event 中的代码,这是唯一将 _hasTextChanged 设置为 true 的地方。我认为这是一个 multi_threading 问题。但不确定如何解决这个问题。我尝试了以下代码,但没有解决问题

private Object thisLock = new Object();
private void A_event(object sender, RoutedEventArgs e)
{
    if(somecondition && !_hasTextChanged)
    {
        Dosomething();
    }
    Lock(thisLock)
    {
        _hasTextChanged = false;
    }
}

private void B_event(object sender, RoutedEventArgs e)
{
    DosomethingElse();
    Lock(thisLock)
    {
        _hasTextChanged = true;
    }
}

有什么想法吗?

无需更仔细地查看,我注意到的第一件事是您正在使用您的共享资源 -- _hasTexstChanged 在锁之外:

if(somecondition && !_hasTextChanged)
{
    Dosomething();
}

您需要保护对跨线程共享资源的所有 访问(读取或写入):

Lock(thisLock)
{
    if(somecondition && !_hasTextChanged)
    {
        Dosomething();
    }        
    _hasTextChanged = false;
}