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
謝謝,它的作品! –