5

可能重复:
C# WinForm 应用程序 - UI 在长时间运行期间挂起

我在 C# Windows 窗体中创建了一个进度条示例应用程序。

我的应用程序运行良好,但是当我尝试移动我的应用程序位置或最小化时,它会“挂起”,直到它的过程不符合要求。

请帮助:如何防止我的应用程序“挂起”?

这是我的应用程序代码:

public partial class ProgressBar : Form
{
    public ProgressBar()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        int value;
        for (value = 0; value != 10000000; value++)
            progressBar1.Value = progressBar1.Value + 1;

        MessageBox.Show("ProgressBar Full", "Done", 
                        MessageBoxButtons.OK, MessageBoxIcon.Information);
        this.Close();
    }

    private void ProgressBar_Load(object sender, EventArgs e)
    {
        progressBar1.Maximum = 10000000;
    }
}
4

2 回答 2

4

它“挂起”的原因是因为进程在同一个线程中运行。使用 BackgroundWorker 将进度条进程移动到另一个线程。

为防止复制+粘贴,请参考以下链接:

于 2012-08-04T12:24:46.480 回答
2

防止这种情况的唯一方法是将工作负载委托给另一个线程。

您可以使用几个类来执行此操作:

后台工作者可能是最简单的方法,因为它提供了将结果返回给 UI 线程的方法。使用其他选项,您需要将结果发送到正确的线程。

于 2012-08-04T13:20:43.370 回答