Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何监视另一个dll中变量的更改?_C#_Wpf_Multithreading_Variables_Event Handling - Fatal编程技术网

C# 如何监视另一个dll中变量的更改?

C# 如何监视另一个dll中变量的更改?,c#,wpf,multithreading,variables,event-handling,C#,Wpf,Multithreading,Variables,Event Handling,以下是我没有想到的: 我希望我的主程序监视来自另一个dll(线程)的变量;此变量是一个bool标志,根据外部硬件触发器的不同,它在true和false之间变化。下面是我所做的,但显然它没有响应变量的变化: public bool IsTriggerOn { get { return TriggerWatcherDll.IsTriggerOn; } set { _isTriggerOn= TriggerWatcherDll.IsTrigge

以下是我没有想到的: 我希望我的主程序监视来自另一个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#代码

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

根据您的描述,听起来您只需要在“其他”DLL中设置一个事件:

然后只需订阅主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!");
    }
}

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

为此定义一个事件。必须有一种方法来注意程序的更改。然后可以触发一个事件。你到底在做什么?是的我有主意了。我只是在被调用的DLL中添加了事件处理程序,然后在主线程中添加了事件响应程序/函数,然后就可以工作了!。非常感谢。答案被接受:)1)您应该尽可能避免使用静态变量2)为什么要使用Invoke?3) 您应该在事件参数中传递触发器值,以避免“线程问题”
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!");
    }
}