c# - Windows 窗体计时器不会停止。这怎么可能?

标签 c# .net winforms debugging timer

在调试期间,我可以看到在 Timer.Stop()Timer.Enabled = false 命令执行后,Timer 仍在运行 (Timer.Enabled = true) .这怎么可能?

最佳答案

当您停止工作线程上的计时器时,这是可能的。例如:

public partial class Form1 : Form {
    public Form1() {
        InitializeComponent();
    }
    Timer timer1;
    protected override void OnLoad(EventArgs e) {
        base.OnLoad(e);
        timer1 = new Timer();
        timer1.Interval = 3000;
        timer1.Start();
        var t = new System.Threading.Thread(stopTimer);
        t.Start();
    }
    private void stopTimer() {
        timer1.Enabled = false;
        System.Diagnostics.Debug.WriteLine(timer1.Enabled.ToString());
    }
}

输出:
是的

计时器必须由 UI 线程停止,类会自动处理它。与 Control.BeginInvoke() 非常相似。有一个明确的竞争, Tick 事件处理程序可以在您停止后运行。如果您创建的第一个计时器是在工作线程上创建的,那么这也可能发生在 UI 线程上。例如启动画面。这不健康,您应该解决这个问题。

关于c# - Windows 窗体计时器不会停止。这怎么可能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6957629/

相关文章:

c# - 在 ToolStripMenuItem 中捕获 mouseClick 和 KeyDown 事件

c# - 获取 MVC 包查询字符串

c# - 输入按键后 CMD 关闭

c# - 如何在c#中禁用鼠标移动

.net - .NET 中的日期为相对文本(例如今天、昨天、1 周前)

c# - 如何将 ViewBag 中的一些对象传递给 Action? - 保留搜索、排序和分页选项

.net - 使用 Form.Controls 修改控件

c# - 如何找到n位数字的最小值?

c# - AssemblyInfo 版本的 Nuspec 版本

c# - 在 Swagger UI 中看不到我的 Controller 操作