【发布时间】:2011-07-22 19:29:35
【问题描述】:
我有一个 WPF 应用程序,它执行外部程序来处理媒体文件,因此在处理媒体文件时 GUI 不会冻结,我通过 backgroundworker 在单独的线程上执行该进程。
private void BackgroundWorkerExecProcess(Process process)
{
BackgroundWorker worker = new BackgroundWorker();
worker.WorkerReportsProgress = false;
worker.DoWork += DoWork;
worker.RunWorkerCompleted += WorkerCompleted;
worker.RunWorkerAsync(process);
}
void DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
Process process = e.Argument as Process;
process.Start();
string stderr = process.StandardError.ReadToEnd();
//I want to display stderr on main thread
process.WaitForExit();
}
void WorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
//some code to update gui telling user that process has finished
}
所以,如果有打印到 stderr 的内容,我可以在调试器中看到它,但如果我尝试对字符串 stderr 执行任何操作,例如我有一个名为“_tbLog”的文本框并且做了
_tbLog.Text+=stderr;
我从编译器收到关于它们在不同线程上的错误。有没有办法将对象从工作线程传递到主线程?
【问题讨论】:
标签: c# .net multithreading backgroundworker