如何从另一个dll监视变量的更改

本文关键字:变量 监视 dll 另一个 | 更新日期: 2023-09-27 17:58:46

以下是我还没有弄清楚的:我想让我的主程序监视来自另一个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#代码;

如何从另一个dll监视变量的更改

看起来您可能有点困惑。根据您给出的代码示例,TriggerWatcherDell类位于不同的程序集中这一事实似乎并不相关
事实上,看起来您访问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!");
    }
}

不过,您可能需要重新考虑静态的使用,而且我还没有谈到线程问题。