监视 C# 中的控件,而不是使用线程

本文关键字:线程 控件 监视 | 更新日期: 2023-09-27 17:55:23

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

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

虽然它做了我需要的,但对我来说似乎是错误的。考虑到我必须生成以管理我的控件的线程数量,它也非常昂贵,某些控件需要检查五六个不同的东西才能执行操作,线程对我来说似乎是唯一可能的方法。

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

监视 C# 中的控件,而不是使用线程

这不仅效率低下,而且不正确;由于线程相关性,除了从 UI 线程之外,永远不应访问控件的属性。设置属性(启用的分配)尤其糟糕,但读取它们(启用的检查)已经够糟糕的了。

这些表单应根据事件通知自行更新,而不是持续监视。例如,通过在两个按钮上挂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 属性更改的代码中执行此操作。