将自定义对象传递给Progress Changed方法。 C#

时间:2015-03-21 12:25:37

标签: c#

我是C#冒险的早期阶段,所以如果这是一个简单的问题我会道歉。我看了看并在线寻找答案但找不到任何东西。

基本上我试图将自定义对象从后台工作线程传递给进度更改方法,以便我可以更新一些标签和一个富文本框。我知道使用报告进度方法我可以传递一个int和一个对象。但是当我这样做时,它不允许我在bw_progressChanged方法中访问它。

以下是我的代码的一些片段 -

Bacgkround Worker

private void bw_DoWork(object sender, DoWorkEventArgs e)
{
     BackgroundWorker worker = sender as BackgroundWorker;
     UserStateSettings user = new UserStateSettings();

     user.rtbText = "Text";

     worker.ReportProgress(0, user);         



     if ((worker.CancellationPending == true))
     {
         e.Cancel = true;

     }
     else
     { .....}
 }

UserStateSettings类

 public class UserStateSettings
 {
      string _rtbText;
      int _productsProcessed;

      public string rtbText
      {
          get
          {
            return _rtbText;
          }
          set
          {
            _rtbText = value;
          }
      }

Bw_ProgressChanged (我试图将对象属性rtbtext放到richtext框中,但它根本不会让我。)

 private void bw_ProgressChanged(object sender, ProgressChangedEventArgs e)
 {
     this.richTextBox1.Text = ....

     this.Refresh();
 }

希望这是有道理的,如果有人能说出一些亮点,我会非常感激!

1 个答案:

答案 0 :(得分:1)

您应该能够从e.UserState属性中提取对象。您需要将其强制转换为您的类型才能使用它。

User user = e.UserState as User;
if (user != null) {
   // populate ui fields
}

请参阅 https://msdn.microsoft.com/en-us/library/system.componentmodel.progresschangedeventargs.userstate(v=vs.110).aspx