Winforms 退出并停止窗体中正在运行的System.Windows.Forms.Timer
如果我以运行System.Windows.Forms.Timer的窗体从Winforms应用程序中调用Application.Exit,那么计时器是否也会自动停止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
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()
退出表单,但还没有发现表单背后的确切科学依据,但它似乎对我更有效