C# 如何知道某个表单是否已打开?
我有一个执行以下操作的应用程序: 一个组件在数据库中查找更改C# 如何知道某个表单是否已打开?,c#,winforms,linq,C#,Winforms,Linq,我有一个执行以下操作的应用程序: 一个组件在数据库中查找更改 对于每个更改,都会向存储更改警报信息的表中添加一行 另一个组件查找警报 对于每个警报,都会弹出一个警报窗体 以前,我的代码一次只显示一个警报,一切正常。现在,我正在更改代码,以允许同时打开多个警报表单 while(true) { DB = //pseudocode: database object Var ResultAlert = from a in DB.Alerts where
对于每个更改,都会向存储更改警报信息的表中添加一行 另一个组件查找警报
对于每个警报,都会弹出一个警报窗体 以前,我的代码一次只显示一个警报,一切正常。现在,我正在更改代码,以允许同时打开多个警报表单
while(true)
{
DB = //pseudocode: database object
Var ResultAlert =
from a in DB.Alerts
where a.Status == 0;
foreach(var RowAlert in ResultAlert)
{
AlertForm f = new AlertForm(RowAlert.Id);
f.Show();
}
Thread.Sleep(1000);
}
如您所见,这段代码将每秒检查新警报,这一切都很好,但它可能每秒打开重复警报表单。我想知道的是如何检测哪些表单处于打开状态(使用相应的AlertID),以便我只能打开新的警报窗口 您需要跟踪为每个警报打开的表单。假设您的警报表有一个整数主键(例如AlertId),您可以在字典中跟踪它们:
var openForms = new Dictionary<int, AlertForm>();
while(true)
{
DB = //pseudocode: database object
Var ResultAlert =
from a in DB.Alerts
where a.Status = 0;
foreach(var RowAlert in ResultAlert)
{
var alertId = RowAlert.AlertId;
if(!openForms.ContainsKey(alertId))
{
AlertForm f = new AlertForm();
openForms.Add(alertId, f);
f.Show();
}
}
Thread.Sleep(1000);
}
var openForms=newdictionary();
while(true)
{
DB=//伪代码:数据库对象
Var ResultAlert=
从DB.Alerts中的
其中a.状态=0;
foreach(ResultAlert中的变量RowAlert)
{
var alertId=rowarert.alertId;
如果(!openForms.ContainsKey(alertId))
{
AlertForm f=新的AlertForm();
添加(alertId,f);
f、 Show();
}
}
睡眠(1000);
}
如果您不需要对打开的表单执行任何操作,那么您可以将ID存储在
哈希集中
很高兴今天看到您的另一个响应。非常有帮助!我实现了你在这里的东西,它工作得很好:D