我有一个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;
我从编译器那里得到了一个关于它们在不同线程上的错误。有没有一种方法可以将对象从工作线程传递到主线程?