如何从另一个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#代码;
看起来您可能有点困惑。根据您给出的代码示例,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!");
}
}
不过,您可能需要重新考虑静态的使用,而且我还没有谈到线程问题。