开发者

unable to update progress bar with threading in C#

开发者 https://www.devze.com 2023-01-25 06:09 出处:网络
private void button1_Click(object sender, EventArgs e) { PROGRESS_BAR.Minimum = 0; PROGRESS_BAR.Maximum = 100;
    private void button1_Click(object sender, EventArgs e)
    {
        PROGRESS_BAR.Minimum = 0;
        PROGRESS_BAR.Maximum = 100;
        PROGRESS_BAR.Value = 0;

        for (int i = 0; i < 100; i++)
        {
            Thread t = new Thread(new ThreadStart(updateProgressBar));
            t.IsBackground = true;
            t.Start();
        }

    }

    private void updateProgressBar()
    {   
          PROGRESS_BAR.PerformStep();
          Thread.Sleep(4000);
    }

I always get this error: Cross-thread operation not valid: Control '' accessed from a thread other than the thread it was created on.

I tried to search in google for solutions and unfortunately all of them didn't work for me. does any one know how to solve this? th开发者_如何学编程anks in advance..


You cannot interact with UI elements from non-UI thread. You need to use code like

this.BeginInvoke((Action)(() => PROGRESS_BAR.PerformStep()));


You should use the BackgroundWorker component and its ProgressChanged event.

You can call the ReportProgress method inside the DoWork handler (which runs on the background thread), then update the progress bar in the ProgressChanged handler (which runs on the UI thread).

If you really want to do it yourself (without a BackgroundWorker), you can call BeginInvoke


All of your UI interaction, including callbacks, property sets, and method calls, must be on the same thread.

One of those callbacks can start another thread (or many threads) but they cannot directly update the UI. The way to handle the updates are through data properties. My processing thread would update a progress status property. This is throne read by the UI thread which has a timer for regular (100ms) updates of the progress bar.

If you do this, you will need a lock on any objects which are used to communicate e status updates (eg. Strings).

0

精彩评论

暂无评论...
验证码 换一张
取 消