应用程序退出时显示等待消息

时间:2011-05-27 10:00:09

标签: c# winforms

我有以下代码,有时ArchiveFiles()需要更多时间来完成执行。

当用户从上下文菜单中多次单击退出选项时,如果ArchiveFiles()需要更多时间,应用程序将无响应。如何再次单击退出选项时显示等待消息?

private void exitToolStripMenuItem_Click(object sender, EventArgs e)
{
    ArchiveFiles(); 
    Application.Exit();
}

感谢
巴斯卡尔

3 个答案:

答案 0 :(得分:5)

您可以使用BackgroundWorker

使用BackgroundWorker,您将能够执行耗时的任务,例如您在另一个线程上拥有的任务,以便UI不会冻结。您将能够报告该任务的进度,然后报告其完成情况并在完成后执行您需要的逻辑。

处理BackgroundWorker.DoWork事件以启动执行可能耗时的工作的操作。

处理BackgroundWorker.ProgressChanged事件以向用户报告异步操作的进度。

最后,处理BackgroundWorker.RunWorkerCompleted事件以在任务完成后实现您想要实现的任何逻辑。


请参阅以下内容:

BackgroundWorker Component Overview

C# BackgroundWorker Tutorial

答案 1 :(得分:4)

创建一个新的WaitingForm并在表单上放置一个图像控件,然后在该图像控件中使用下面的.gif文件,它会自动设置动画。然后使用以下代码:

enter image description here

  private void exitToolStripMenuItem_Click(object sender, EventArgs e)
  {
     using (var wait = new WaitingForm())
     {
       wait.Show();
       ArchiveFiles(); 
       Application.Exit();
     }
  }

这可能不是最好的解决方案,但它是最快的。如果您希望表单成为对话框,请改用wait.ShowDialog();并在其中包含ArchiveFiles(); Application.Exit(); 个函数(如果这是概率)。

答案 2 :(得分:2)

您必须异步运行ArchiveFiles,方法是使用thread或任务,或者使用delegate方法制作一些BeginInvoke

您应该使用一些同步对象,如ManualResetEvent,这样主线程就不会继续执行,调用Application.Exit()。或者您可以使用某个事件来了解操作何时完成,然后调用Application.Exit()(或在ArchiveFiles内调用它),但我发现情况会更糟。