正确显示等待对话框的方法

时间:2013-12-27 12:30:28

标签: c# winforms .net-4.0

我有Marquee样式ProgressBar的WaitDialog。

  1. 这是显示它的正确方法吗?

        var wd = new WaitDialog();
        Task.Factory.StartNew(() =>
        {
            LongRunningMethod();
            wd.Close();
        });
        wd.ShowDialog();
    
  2. 请推荐一种正确的方法来报告非Marquee ProgressBar的任务进度。

1 个答案:

答案 0 :(得分:3)

我认为您正在寻找的是一种运行长时间运行方法并显示进度对话框而无需锁定UI的方法。您还需要通过从其他线程访问UI来注意跨线程问题。

我建议以这种方式对其进行模式化,这将使您的应用程序在任务运行时保持响应:

    var wd = new WaitDialog();
    wd.Show(); // Show() instead of ShowDialog() to avoid blocking
    var task = Task.Factory.StartNew(() => LongRunningMethod());
    // use .ContinueWith to avoid blocking
    task.ContinueWith(result => wd.Invoke((Action)(() => wd.Close())));

你显示你的进度对话框 - 无论是否有一个选框都没有结果 - 然后你自己的LongRunningMethod就自己的任务了。使用.ContinueWith方法在任务完成时关闭对话框,并避免阻止程序的其余部分。