gpt4 book ai didi

c# - 了解外部变量何时更改的有效方法是什么?

转载 作者:太空宇宙 更新时间:2023-11-03 13:18:04 24 4
gpt4 key购买 nike

我正在处理一个包含 2 个项目的 Visual Studio 解决方案。一个主要的 WPF 项目,以及一个使用外部 COM 库并通过更易于调用的方法简化所有代码的类库。我试图将代码分开,所以你可以说类库是一个工作项目,而我的主项目有所有与 UI 相关的代码。我的问题是在类库中使用变量时。

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

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

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

最佳答案

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

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

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

您当前使用的是pull 方法,您认为它不如push 方法有效,这是对的。但是,由于您的代码无法拦截对目标变量的写入,因此您几乎只能执行拉取操作。

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

如果没有办法让库将更改推送到您的代码,那么您只需要决定轮询值的频率。如果执行拉取的成本不高,那么我认为您当前的 250 毫秒应该足够响应,让您的用户感觉该值正在实时更新。

进一步阅读:

How do server-client push/pull connections work?

Data-Pull Model and Data-Push Model

关于c# - 了解外部变量何时更改的有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25372615/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com