C# 如何监视另一个dll中变量的更改?
以下是我没有想到的: 我希望我的主程序监视来自另一个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
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!");
}
}