进度条和线程

时间:2013-05-16 15:02:42

标签: c# multithreading progress-bar

我有这个进度条类(测试线程)

public class ProgressBarUpdate
    {
        //Add getters and setters
        static MainGUI theForm = (MainGUI)Application.OpenForms[0];
        ProgressBar pBarCur = theForm.pBarCur; //Yes, accessing public for now
        bool updateCur = false;
        bool stopCur = false;
        bool showMax = false;
    public ProgressBarUpdate()
    {

    }
    public void resetCur()
    {
        pBarCur.Value = 0;
    }
    public void DoCurUpdate()
    {
        while (!stopCur)
        {
            if (pBarCur.Value < (pBarCur.Maximum / 10) * 9)
                pBarCur.PerformStep();
            if (showMax)
            {
                pBarCur.Value = pBarCur.Maximum;
                showMax = false;
            }
        }

    }
public void StopCur()
        {
            stopCur = true;
        }
        public void UpdateCur()
        {
            updateCur = true;
        }
        public void UpdateToMax()
        {
            showMax = true;
        }

然后我在不同的A类中调用所有这些来从那里更新GUI:

ProgressBarUpdate updateBar = new ProgressBarUpdate();

        Thread currentProgressUpdater = new Thread(new ThreadStart(updateBar.DoCurUpdate));

        try
        {
            currentProgressUpdater.Start();

            currentProgressUpdater.Join();
        }
        catch (Exception)
        {

        }

在我运行之后,我得到了我的应用程序停止响应的对话框(马上),然后它要求我关闭。我没有正确实现线程吗?或者我错过了一步?

2 个答案:

答案 0 :(得分:3)

您的问题是致电currentProgressUpdater.Join();。你正在阻止UI线程。

创建新线程的重点是允许UI线程继续处理UI事件。你不是这样做的。启动一个线程然后立即加入它并没有什么不同,只是在线执行代码。

您还可以从新线程中运行的方法访问控件。那不行。 UI控件只能从UI线程访问。

答案 1 :(得分:0)

你在while (!stopCur)

处于无限循环中

您从未将stopCur设置为true