如何监视来自另一个DLL的变量的变化?

时间:2013-02-12 16:47:01

标签: c# wpf multithreading variables event-handling

这是我没想到的: 我希望我的主程序监视来自另一个dll(线程)的变量;此变量是bool标志,根据外部硬件触发器在true和false之间变化。这是我做的,但显然它没有响应变量的变化:

public bool IsTriggerOn
{
    get { return TriggerWatcherDll.IsTriggerOn; }
    set
        {
             _isTriggerOn= TriggerWatcherDll.IsTriggerOn = value;
             if (_isTriggerOn == true)
             {
                  System.Windows.Forms.MessageBox.Show("Trigger is ON!");
             }
         }
}

我该怎么做?感谢。

我正在使用C#+ WPF,上面的代码来自xaml后面的C#代码;

1 个答案:

答案 0 :(得分:1)

看起来你可能会让自己感到困惑。根据您给出的代码示例,TriggerWatcherDll类位于不同的程序集中这一事实似乎并不相关。 实际上,看起来您正在访问IsTriggerOn作为类的静态属性(基于所使用的命名),因此不同的线程也与检测更改无关(尽管竞争条件是可能的)。

从你所描述的内容来看,你只需要在“其他”DLL中使用一个事件:

class TriggerWatcherDll
{
    public static event EventHandler TriggerChanged;

    private static bool _trigger = false;
    public static bool IsTriggerOn
    {
        get { return _trigger; }
        set
        {
            if (_trigger != value)
            {
                _trigger = value;
                if (TriggerChanged != null)
                    TriggerChanged.Invoke(null, new EventArgs());
            }
        }
    }
}

然后只需订阅主DLL中的事件:

class OtherDll
{
    public OtherDll()
    {
        TriggerWatcherDll.TriggerChanged += TriggerWatcherDll_TriggerChanged;
    }

    void TriggerWatcherDll_TriggerChanged(object sender, EventArgs e)
    {
        if (TriggerWatcherDll.IsTriggerOn)
            System.Windows.Forms.MessageBox.Show("Trigger is ON!");
    }
}

您可能想重新考虑使用静态,但我没有涉及线程问题。