【发布时间】:2013-03-29 16:20:50
【问题描述】:
我正在尝试通过后台工作程序在与调度程序不同的类中运行一个函数,并让它在每次迭代时更新进度。我没有收到任何错误,并且后台工作程序运行正常,但我的文本框永远不会更新...
public partial class MainWindow : Window
{
public BackgroundWorker worker = new BackgroundWorker();
public MainWindow()
{
InitializeComponent();
worker.WorkerReportsProgress = true;
worker.DoWork += new DoWorkEventHandler(workerDoWork);
worker.ProgressChanged += new ProgressChangedEventHandler(workerProgressChanged);
}
private void myButtonClick(object sender, RoutedEventArgs e)
{
worker.RunWorkerAsync();
}
void workerDoWork(object sender, DoWorkEventArgs e)
{
yv_usfm.convert(worker);
}
void workerProgressChanged(object sender, ProgressChangedEventArgs e)
{
myTextBox.Text = "some text";
}
}
public class yv_usfm
{
public static void convert(BackgroundWorker worker)
{
int i = 1;
while (i < 100)
{
worker.ReportProgress(i);
i++;
}
}
}
【问题讨论】:
-
如果您正在考虑从 不同的 类更新
BackgroundWorker的进度,那么您误解了BackgroundWorker的用途。我建议你使用Task<T>或线程池。 -
我刚刚复制并运行了你的代码,它对我来说很好......
-
是的,我不知道为什么我的文本框没有更新
-
Err 抱歉,我刚刚意识到您正在使用 WPF。它在 Windows 窗体中工作正常,但不是 WPF 窗口
-
再次抱歉。它在 WPF 中也为我工作......该死!
标签: c# wpf backgroundworker