我是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();
}
希望这是有道理的,如果有人能说出一些亮点,我会非常感激!
答案 0 :(得分:1)
您应该能够从e.UserState属性中提取对象。您需要将其强制转换为您的类型才能使用它。
User user = e.UserState as User;
if (user != null) {
// populate ui fields
}