2012-03-10 61 views
2

我无法获得进度条的工作!如果即使代码被执行ReportProgress犯规我执行下面的代码吧保留为空似乎任何更新..:backgroundWorker和progressChanged不工作

namespace GPUZ_2 

{ 
public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 

     GPUZdata test = new GPUZdata 
     { 
     }; 

     //invio l'oggetto al thread backgroundworker 
     backgroundWorker1.RunWorkerAsync(test); 
    } 


    private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) 
    { 
     // 
     // e.Argument always contains whatever was sent to the background worker 
     // in RunWorkerAsync. We can simply cast it to its original type. 
     // 
     GPUZdata argumentTest = e.Argument as GPUZdata; 




     argumentTest.OneValue = 6; 
     Thread.Sleep(2000); 
     backgroundWorker1.ReportProgress(50); 
     argumentTest.TwoValue = 3; 
     Thread.Sleep(2000); 
     backgroundWorker1.ReportProgress(100); 


     // 
     // Now, return the values we generated in this method. 
     // Always use e.Result. 
     // 
     e.Result = argumentTest; 
    } 


    private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 
    { 

     // Receive the result from DoWork, and display it. 

     GPUZdata test = e.Result as GPUZdata; 
     this.Text = test.OneValue.ToString() + " " + test.TwoValue.ToString(); 

    } 

    private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e) 
    { 
     // Change the value of the ProgressBar to the BackgroundWorker progress. 
     progressBar1.Value = e.ProgressPercentage; 
     // Set the text. 
     this.Text = e.ProgressPercentage.ToString(); 
    } 
} 

}

在此先感谢您的帮助

+2

最重要的事:在RunWorkerCompleted事件*从未*忽略e.Error财产。 – 2012-03-10 23:06:14

+0

好的,谢谢,我只是跟着一个教程,需要最少的代码 – rekotc 2012-03-11 13:01:51

回答

5

要初始化BackgroundWorker的,您必须启用进度报告并挂上你的事件处理程序:

// Enable progress reporting 
backgroundWorker1.WorkerReportsProgress = true; 

// Hook up event handlers 
backgroundWorker1.DoWork += backgroundWorker1_DoWork; 
backgroundWorker1.RunWorkerCompleted += backgroundWorker1_RunWorkerCompleted; 
backgroundWorker1.ProgressChanged += backgroundWorker1_ProgressChanged; 
+0

谢谢!这解决了我的问题,我不明白,我不得不挂接事件处理程序,以使其运行,谢谢:) – rekotc 2012-03-11 13:04:15

3

我不“看不到你设置WorkerReportsProgress属性为true - 最有可能的问题是:

backgroundWorker1.WorkerReportsProgress = true; 
backgroundWorker1.RunWorkerAsync(test); 
+0

我试图添加行到代码,但没有运气,无论如何,我使用Visual Studio GUI启用进度报告,是不是一样? – rekotc 2012-03-11 13:02:56

-1

我有同样的问题。在AssemblyInfo.cs中,您应该对ComVisible进行此更改。你需要

[assembly: ComVisible(true)] 
+0

你能提供更多的细节来证明你的答案。就像为什么ComVisible(true)解决了问题等。 – 2016-12-16 11:23:45

相关问题