У меня есть приложение WPF, которое выполняет внешние программы для обработки мультимедийных файлов, и чтобы графический интерфейс не зависал при обработке мультимедийных файлов, я выполняю этот процесс в отдельном потоке с помощью 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;
Я получаю сообщение от компилятора об их нахождении в отдельных потоках. Есть ли способ передать объект из рабочего потока в основной поток?