0

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

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# 代码;

4

1 回答 1

2

看起来你可能会有点困惑。根据您提供的代码示例,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!");
    }
}

不过,您可能想重新考虑使用静态,而且我还没有涉及线程问题。

于 2013-02-12T17:20:56.140 回答