这是我没想到的:
我希望我的主程序监视来自另一个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#代码;
答案 0 :(得分:1)
看起来你可能会让自己感到困惑。根据您给出的代码示例,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!");
}
}
您可能想重新考虑使用静态,但我没有涉及线程问题。