2012-01-02 46 views
-2

我正在运行计时器以便与硬件(串口通信)进行通信。基于计时器显示表格

当一个数据接收事件被触发我需要打开另一个表单,我应该显示一个图片框指示警报。

我正面临一个问题,因为计时器正在运行时显示父窗体的子窗体。应该调用一个子表单,并不断调用子表单。

有人帮我解决这个问题。

+0

请提供一些代码来证明您的问题。 – 2012-01-02 04:08:16

回答

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事件连接到formShowingfalse

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