C# 了解外部变量何时变化的有效方法是什么?

C# 了解外部变量何时变化的有效方法是什么?,c#,wpf,variables,com,notifications,C#,Wpf,Variables,Com,Notifications,我正在处理一个VisualStudio解决方案,它有两个项目。一个主WPF项目和一个类库,该类库利用外部COM库,并使用更易于调用的方法简化所有代码。我试图将代码分开,因此可以说类库是一个辅助项目,而我的主项目拥有所有与UI相关的代码。我的问题是在类库中处理变量时 我在类库中有一个变量,它保存一个int=0,如果在我购买的扫描仪上按下一个物理按钮,它会变为1。我知道按钮是否被按下的唯一方法是检查变量属性,我需要一种知道它何时改变的方法。到目前为止,我唯一的想法是: Thread backgrou

我正在处理一个VisualStudio解决方案,它有两个项目。一个主WPF项目和一个类库,该类库利用外部COM库,并使用更易于调用的方法简化所有代码。我试图将代码分开,因此可以说类库是一个辅助项目,而我的主项目拥有所有与UI相关的代码。我的问题是在类库中处理变量时

我在类库中有一个变量,它保存一个int=0,如果在我购买的扫描仪上按下一个物理按钮,它会变为1。我知道按钮是否被按下的唯一方法是检查变量属性,我需要一种知道它何时改变的方法。到目前为止,我唯一的想法是:

Thread backgroundThread = new Thread(() => {
   while (variable == 0) { 
       // Do some work, if not;
   thread.Sleep(250); 
   }
});

但这感觉效率很低,或者我感觉也是这样。如果我可以修改这个属性,我希望向Set方法添加一些代码,以获得更改通知,但由于这是一个外部COM库的属性,我无法控制它们。这是我唯一能做到这一点的方法吗?

一般来说,有两种方法可以知道什么时候发生了变化:

  • 拉取-以特定的间隔拉取值,并跟踪调用之间的值。如果值已更改,则执行“值已更改”逻辑

  • 推送-告诉值的所有者在值发生更改时通知您。您还可以告诉所有者您希望如何得到通知。然后,当值发生更改时,所有者将向您推送通知,通常是为您调用“值已更改”逻辑

您当前使用的是方法,您正确地认为它比方法效率低。然而,由于您的代码无法截获对目标变量的写入,所以拉取几乎是您所能做的全部

仔细检查API,确保没有列出与您感兴趣的变量相关的某种“回调”或“事件”。如果有,那么您可能可以挂接到那里的库中,然后在值更改时被推送通知

如果没有办法让库推动对代码的更改,那么您只需要决定轮询值的频率。如果执行pull没有太大成本,那么我认为您当前的250毫秒响应速度应该足够快,让您的用户感觉值正在实时更新

进一步阅读:


如果您无法强制外部代码使用回调或事件,听起来您好像被卡住了:(放在一边,不需要添加“更多信息”您的标题。我们将假定有更多信息,如果没有,请进行适当的投票。当变量更改值时,您无法使类库触发事件?@dbc没有,我尝试过,但它是COM类库中的密封属性,我甚至看不到其内容(我几乎无法将其用于附带的糟糕文档)。感谢您的详细回答。我知道获得通知的唯一方法是通过属性回调或事件,或直接检查值,但您的推/拉解释使其更加清晰。