显示基于计时器的表单

时间:2012-01-02 04:02:48

标签: c#

我正在运行计时器以便与硬件通信(串口通信)。

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

我正面临一个问题,即在计时器运行时从父级显示子表单。子表单将被连续调用,因为应该调用它。

有人帮我解决了这个问题。

2 个答案:

答案 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