C# 了解外部变量何时变化的有效方法是什么?
我正在处理一个VisualStudio解决方案,它有两个项目。一个主WPF项目和一个类库,该类库利用外部COM库,并使用更易于调用的方法简化所有代码。我试图将代码分开,因此可以说类库是一个辅助项目,而我的主项目拥有所有与UI相关的代码。我的问题是在类库中处理变量时 我在类库中有一个变量,它保存一个int=0,如果在我购买的扫描仪上按下一个物理按钮,它会变为1。我知道按钮是否被按下的唯一方法是检查变量属性,我需要一种知道它何时改变的方法。到目前为止,我唯一的想法是:C# 了解外部变量何时变化的有效方法是什么?,c#,wpf,variables,com,notifications,C#,Wpf,Variables,Com,Notifications,我正在处理一个VisualStudio解决方案,它有两个项目。一个主WPF项目和一个类库,该类库利用外部COM库,并使用更易于调用的方法简化所有代码。我试图将代码分开,因此可以说类库是一个辅助项目,而我的主项目拥有所有与UI相关的代码。我的问题是在类库中处理变量时 我在类库中有一个变量,它保存一个int=0,如果在我购买的扫描仪上按下一个物理按钮,它会变为1。我知道按钮是否被按下的唯一方法是检查变量属性,我需要一种知道它何时改变的方法。到目前为止,我唯一的想法是: Thread backgrou
Thread backgroundThread = new Thread(() => {
while (variable == 0) {
// Do some work, if not;
thread.Sleep(250);
}
});
但这感觉效率很低,或者我感觉也是这样。如果我可以修改这个属性,我希望向Set方法添加一些代码,以获得更改通知,但由于这是一个外部COM库的属性,我无法控制它们。这是我唯一能做到这一点的方法吗?一般来说,有两种方法可以知道什么时候发生了变化:
- 拉取-以特定的间隔拉取值,并跟踪调用之间的值。如果值已更改,则执行“值已更改”逻辑
- 推送-告诉值的所有者在值发生更改时通知您。您还可以告诉所有者您希望如何得到通知。然后,当值发生更改时,所有者将向您推送通知,通常是为您调用“值已更改”逻辑
如果您无法强制外部代码使用回调或事件,听起来您好像被卡住了:(放在一边,不需要添加“更多信息”您的标题。我们将假定有更多信息,如果没有,请进行适当的投票。当变量更改值时,您无法使类库触发事件?@dbc没有,我尝试过,但它是COM类库中的密封属性,我甚至看不到其内容(我几乎无法将其用于附带的糟糕文档)。感谢您的详细回答。我知道获得通知的唯一方法是通过属性回调或事件,或直接检查值,但您的推/拉解释使其更加清晰。