我正在运行计时器以便与硬件通信(串口通信)。
当数据接收事件被触发时,我需要打开另一个表单,我应该显示一个表示警报的图片框。
我正面临一个问题,即在计时器运行时从父级显示子表单。子表单将被连续调用,因为应该调用它。
有人帮我解决了这个问题。
答案 0 :(得分:0)
在带有计时器的表单中为这样的表单声明一个变量:
private AlarmForm frmAlarm;
private bool formShowing;
private void YOUR_TIMER_EVENT_HANDLER(object sender, EventArgs e)
{
if(formShowing) return;
frmAlarm=null;
frmAlarm=new AlarmForm();
formShowing=true;
frmAlarm.Closed+=(a,b)=>{formShowing=false;};
frmAlarm.Show();
}
我们在显示表单时将formShowing
变量设置为true
。在下一行中,我们将Closed
事件连接起来,以便在关闭警报表单时将formShowing
设置为false
。
答案 1 :(得分:0)
听起来您需要管理多个事件,每个事件都应该导致显示一个表单。
如果这是真的,您需要某种数据结构来保存收到的事件,并为每个事件添加一个标记,以指示是否已为其显示子表单。
Dictionary<string,bool> wasChildFormDisplayed = new Dictionary<string,bool>();
// event received - someString uniquely identifies the event
if (!wasChildFormDisplayed.ContainsKey[someString])
wasChildFormDisplayed.Add(someString, false);
if (!wasChildFormDisplayed[someString]) {
// ... code that opens child form ...
wasChildFormDisplayed[someString] = true;
}
请注意,如果您正在使用线程,则需要使用锁定来防止同时读取和写入wasChildFormDisplayed
。