C#在不同名称空间/类WPF中回退工作程序
编辑:通过添加缺少的进度更改事件处理程序解决。 我正在将一个WPF VB.net应用程序移植到C#上,并且与另一个类中具有DoWork方法的后台工作程序有问题。我怀疑我没有正确地设置后台工作人员,或者我可能需要一名处理人员 vb示例代码工作正常,进度条指示正确,C#代码似乎触发了bw.RunWorkerAsync();方法,因为它报告为IsBusy=True,但没有其他响应、进度或对外部类的调用(据我所知) 这是一个WPF应用程序,问题在于Usercontrol试图从控件外的公共类报告进度 如果有人能给我指出正确的方向,我会非常感激 C#示例代码C#在不同名称空间/类WPF中回退工作程序,c#,backgroundworker,C#,Backgroundworker,编辑:通过添加缺少的进度更改事件处理程序解决。 我正在将一个WPF VB.net应用程序移植到C#上,并且与另一个类中具有DoWork方法的后台工作程序有问题。我怀疑我没有正确地设置后台工作人员,或者我可能需要一名处理人员 vb示例代码工作正常,进度条指示正确,C#代码似乎触发了bw.RunWorkerAsync();方法,因为它报告为IsBusy=True,但没有其他响应、进度或对外部类的调用(据我所知) 这是一个WPF应用程序,问题在于Usercontrol试图从控件外的公共类报告进度 如果
namespace testApp.Usercontrols
public partial class ucHome : UserControl
{
public Sharing.clsDownloadCollection foo = new Sharing.clsDownloadCollection();
BackgroundWorker bw = new BackgroundWorker();
public ucHome()
{ InitializeComponent();
}
private void Button1_Click(object sender, RoutedEventArgs e)
{
bw.WorkerReportsProgress = true;
pBar.Maximum = 50000; //progress bar on ucHome
pBar.Value = 0;
**// Indicates IsBusy=True when debugging but can't see any further activity
bw.RunWorkerAsync();
//**
}
public void bw_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
var foo=new foo();
// possible problem?
foo.DoWork((BackgroundWorker)sender);
}
public void bw_ProgressChanged(object sender, System.ComponentModel.ProgressChangedEventArgs e)
{
this.pBar.Value = e.ProgressPercentage;
}
外部类包含不同的项目文件夹/命名空间
namespace testApp.Sharing
{
//different namespace /folder than ucHome
public class foo
{
public void DoWork(BackgroundWorker bw)
{
for (int i = 0; i <= 50000; i++) {
i += 1;
bw.ReportProgress(i - 1);
}
}
}
用户控件调用的类foo
Public Class foo
Public Sub DoWork(ByVal bw As BackgroundWorker)
For i As Integer = 0 To 50000
i += 1
bw.ReportProgress(i - 1)
Next
End Sub
End Class
通过添加缺少的backgrounder ProgressChanged事件处理程序来解决此问题。代码未按提供的方式编译。例如,“myfoo”的定义在哪里?您是否混淆了本地“foo”和导致您出现问题的“myfoo”字段?还有,为什么要将发送者强制转换两次(为什么要将其存储在一个变量中而从不使用它。请尝试清理代码,这样其他人就不必像那样费力地处理这些麻烦了。为我的输入错误道歉(myfoo不打算出现在帖子中)。我已经解决了这个问题,因为缺少了一个事件处理程序来更改进度。
Public Class foo
Public Sub DoWork(ByVal bw As BackgroundWorker)
For i As Integer = 0 To 50000
i += 1
bw.ReportProgress(i - 1)
Next
End Sub
End Class