取消订阅/订阅活动危险吗?

时间:2013-06-26 16:30:55

标签: c# winforms events

最初这个问题让我来到这里: Disable firing TextChanged event

我想知道 jtmach 的答案是否“干净”:

   private void mytextbox_LostFocus(object sender, RoutedEventArgs e)
    {
      this.mytextbox.TextChanged -= this.myTextBox_TextChanged;

      if(textbox.Text.ToString().Contains('.'))
      {
             textbox.Foreground = new SolidColorBrush(Colors.Gray);
             textbox.Background = new SolidColorBrush(Colors.White);
      }

      this.mytextbox.TextChanged += this.myTextBox_TextChanged;    
    }

在这样的另一个事件中取消订阅TextChanged - 事件是否可以?

或者是否容易出错,因为在LostFocus期间可以调用TextChanged事件(由用户或程序调用)?

1 个答案:

答案 0 :(得分:2)

如果这是在多线程上下文中,那么这将是一个问题。当您取消订阅时,TextChanged事件当前可能正在运行,从而阻止您在此代码也在运行时假设它正在运行。

也就是说,在这种情况下,两个方法总是会在UI线程中运行,所以虽然这个代码不会真正被“破坏”(你不能同时运行文本更改事件,因为UI线程只能无论如何都要同时运行这两个事件中的一个)但它也没有用处并且可以被删除(因为在事件处理程序运行时无法触发事件,因为它阻止了UI线程)。 / p>