我试图通过后台工作程序在与调度程序不同的类中运行函数,并让它在每次迭代时更新进度。我没有收到任何错误,后台工作人员正常运行,但我的文本框从未更新...
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++;
}
}
}
答案 0 :(得分:0)
是什么让你说BackgroundWorker
运作正常?我没有看到worker.RunWorkerAsync()
的号召,没有它就永远不会开始。
答案 1 :(得分:0)
你没有开始工作!
worker.RunWorkerAsync();
答案 2 :(得分:-1)
试试这个:
void DoWork(...)
{
YourMethod();
}
void YourMethod()
{
if(yourControl.InvokeRequired)
yourControl.Invoke((Action)(() => YourMethod()));
else
{
//Access controls
}
}
希望这有帮助。