Winforms 退出并停止窗体中正在运行的System.Windows.Forms.Timer

Winforms 退出并停止窗体中正在运行的System.Windows.Forms.Timer,winforms,timer,Winforms,Timer,如果我以运行System.Windows.Forms.Timer的窗体从Winforms应用程序中调用Application.Exit,那么计时器是否也会自动停止 public void StartProcessing() { int i = 0; while (true) { if (BatchNumbersQueue.Count > 0) { i

如果我以运行System.Windows.Forms.Timer的窗体从Winforms应用程序中调用Application.Exit,那么计时器是否也会自动停止

 public void StartProcessing()
    {

        int i = 0;

        while (true)
        {
            if (BatchNumbersQueue.Count > 0)
            {
                i = BatchNumbersQueue[0];
            }
            else
            {
                //stop the time that queues batches  and exit
                timer1.Stop();
                Application.Exit();
            }
            ProcessQueue();
            QueueOfBatches.RemoveBatchToQueue(i);
            i = 0;
        }
    }
    //timer tick event
    private void timer1_Tick(object sender, EventArgs e)
    {

        UpdateProcessingQueue();
    }

我直接从这里引用

Exit方法停止所有线程上所有正在运行的消息循环,并关闭应用程序的所有窗口。此方法不一定强制应用程序退出。Exit方法通常从消息循环中调用,并强制Run返回

要仅退出当前线程的消息循环,请调用ExitThread

Exit引发以下事件并执行关联的条件操作:

OpenForms属性表示的每个表单都会引发FormClosing事件。可以通过将其FormClosingEventArgs参数的Cancel属性设置为true来取消此事件。 如果其中一个或多个处理程序取消事件,则Exit将返回,而无需进一步操作

否则,将为每个打开的窗体引发FormClosed事件,然后关闭所有正在运行的消息循环和窗体


换句话说,调用
Exit()
肯定会停止并处理
计时器对象。

我确信
应用程序.Exit()
会停止所有操作,然后优雅地退出。@Evanlewis除非表单关闭事件不会触发。请参阅。@LarsTech查看
Application.Exit()
的MSDN文档。它清楚地说明了表单关闭事件的提出。除非我读错了…@Evanlewis我站在正确的立场上。(实际上是坐着的)。@Evanlewis-Hans Passant最近回答了我的一个问题,同时指出应该通过设置其
对话框result
而不是使用
form.Close()
退出表单,但还没有发现表单背后的确切科学依据,但它似乎对我更有效