1
工作时我已阅读这篇文章,但它并没有帮助我:后台工作不正常工作做在WPF
Background worker does not work properly in WPF
我正在使用WPF(C#)后台工作,我想当阅读文本文件时,它显示“加载....”,但它不显示。我的代码是:
private delegate void upmdlg();
private delegate void upmdlg2();
private void callmetoread()
{
StreamReader str = new StreamReader("C:\\test.txt");
while (!str.EndOfStream)
{
richTextBox1.AppendText(str.ReadToEnd());
}
}
private void callmetochangelabel()
{
label1.Foreground = Brushes.Red;
label1.Content = "loading ....";
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
label1.Foreground = Brushes.Yellow;
label1.Content = "idle";
BackgroundWorker bg = new BackgroundWorker();
bg.DoWork += delegate(object s, DoWorkEventArgs args)
{
upmdlg mo = new upmdlg(callmetochangelabel);
label1.Dispatcher.BeginInvoke(mo, DispatcherPriority.Normal);
upmdlg mo2 = new upmdlg(callmetoread);
richTextBox1.Dispatcher.BeginInvoke(mo2, DispatcherPriority.Normal);
};
bg.RunWorkerCompleted += delegate(object s, RunWorkerCompletedEventArgs arg)
{
label1.Foreground = Brushes.Green;
label1.Content = "done ....";
};
bg.RunWorkerAsync();
}
感谢您的任何帮助。
谢谢,我测试了自己的答案,但它不工作。 –
您能否将DoWork方法体更改为: 'context.Post(state => callmetochangelabel(),null); Thread.Sleep(1000); context.Post(state => callmetoread(),null); ' 确保'callmetochangelabel'方法未被执行? – DimaS
谢谢,它的作品! –