我正在运行计时器以便与硬件(串口通信)进行通信。基于计时器显示表格
当一个数据接收事件被触发我需要打开另一个表单,我应该显示一个图片框指示警报。
我正面临一个问题,因为计时器正在运行时显示父窗体的子窗体。应该调用一个子表单,并不断调用子表单。
有人帮我解决这个问题。
我正在运行计时器以便与硬件(串口通信)进行通信。基于计时器显示表格
当一个数据接收事件被触发我需要打开另一个表单,我应该显示一个图片框指示警报。
我正面临一个问题,因为计时器正在运行时显示父窗体的子窗体。应该调用一个子表单,并不断调用子表单。
有人帮我解决这个问题。
与计时器的形式声明一个变量的形式是这样的:
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
。
听起来就像你需要管理多个事件,每个事件都应该导致一个单独的窗体显示。
如果这是真的,您需要某种数据结构来保存收到的事件,并为每个事件指定一个标志,以指示是否已经显示子窗体。
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
。
请提供一些代码来证明您的问题。 – 2012-01-02 04:08:16