gpt4 book ai didi

c# - 除了使用线程之外,监视 C# 中的控件

转载 作者:行者123 更新时间:2023-12-01 19:56:43 25 4
gpt4 key购买 nike

我有一个 winform 应用程序,其中有很多需要持续监控的控件。例如,有一个按钮,只有当其他两个按钮被禁用时才应启用它,并且它们在不同的实例中禁用。所以我现在正在做的是使用一个线程来监视连续 while 循环中的其他两个按钮,例如

while(true)
{
if(btn.enabled==false and btn1.enabled==false)
{
bt3.enabled==true
}
}

虽然它满足了我的需要,但对我来说似乎是错误的。另外,考虑到我必须生成来管理控件的线程数量,它的成本非常高,某些控件需要检查五到六个不同的事情才能执行操作,而线程对我来说似乎是唯一可能的方法。

请告诉我是否还有其他方法可以做到这一点

最佳答案

这不仅效率低下,而且是错误的;由于线程关联性,除了 UI 线程之外,您不应该访问控件的属性。 设置属性(启用的分配)特别糟糕,但读取它们(启用的检查)就足够糟糕了。

这些表单应该根据事件通知自行更新,而不是持续监控。例如,通过 Hook EnabledChanged在两个按钮上。

// (in the form initialization code)
btn.EnabledChanged += UpdateButtons;
btn1.EnabledChanged += UpdateButtons;

//...
private void UpdateButtons(object sender, EventArgs args)
{
bt3.Enabled = !btn.Enabled && !btn1.Enabled;
}

您也可以(相反)在导致 Enabled 属性发生更改的代码中执行此操作。

关于c# - 除了使用线程之外,监视 C# 中的控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5933506/

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