c# - 窗体。 Form.Close 后定时器不停止

标签 c# forms winforms timer

我有一个上下文应用程序,它创建新的 Form 以向用户显示一些信息。为此,该用户可以使用按钮关闭表单。然而,在 90 秒后,表单自行关闭,但首先弹出一个消息框让用户知道。

现在我很难理解为什么 MessageBox 会在表单第一次关闭后每隔 90 秒再次弹出。

我有一个用于 90 秒自动关闭并使用 Form.Close 关闭它的 Windows.Forms.Timer。我将表单添加到字典中,其中包含一些管理内容的 ID。

创建表单:

MainForm myform = new MainForm();
myform.plate = eventData.iPlate;
myform.tag = eventData.iTag;
formulario.image = eventData.Image;
formulario.PopulateMyFields();
ActivePopUps.Add(eventData.ide, myform);
myform.Show();

现在使用字典关闭它们

foreach (var popup in ActivePopUps)
{
    if (popup.Key == eventData.some_id)
    {
        try
        {
            popup.Value.Close();
        }
        catch { }
        ActivePopUps.Remove(popup.Key);
    }
}

以及在 MainForm 中创建的计时器

mytimer = new System.Windows.Forms.Timer();
timer_mytimer .Interval = Properties.Settings.Default.ClosingTime; // 90000
mytimer.Tick+=new EventHandler(mytimerEvent);
mytimer.Enabled = true;
mytimer.Start();

和实际的定时器事件

private void mytimerEvent(object sender, EventArgs e)
{
    MessageBox.Show("Hey ! Closing this one");
    this.Close();
}

我相信我可以在调用 .Close() 之前停止计时器并使其停止,但我的问题是……Close 不应该这样做吗?甚至调用 .Dispose()?为什么计时器会继续工作,还有什么在后台存活?

最佳答案

只是为了澄清。 Sinatr 在他的评论中提供了正确的答案,所以问题得到了完美的回答,我的代码运行良好。

我在创建计时器时遗漏了以下内容:

this.mytimer = new System.Windows.Forms.Timer(this.components)

通过这样做,计时器链接到表单,以便在表单调用 Close() 时处理它。

关于c# - 窗体。 Form.Close 后定时器不停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43933999/

相关文章:

c# - 有没有办法在构造函数中强制显式参数类型?

php - 使用 HTML 和 PHP 将表单数据发送到电子邮件

php - 在 db.php 中形成 post 数组到 class.php 和 PDO 插入函数

winforms - Powershell文本框仅读取最后一个元素

c# - 在 DatagridViewCell 中显示用户控件

c# - 将二进制字符串转换为整数

c# - 在azure管道中为dotnet应用程序运行开放API生成器命令,无法查询存储库, "Request failed with status code 504"错误

c# - 如何编写支持对象初始值设定项的自定义 DynamicObject 类

javascript - 没有js的用户如何正确使用javascript-links

c# - 如何在 GridView 中设置行号