에 반환, 나는 fallowing 코드와 함께 새로운 UI 스레드를 생성 BackgroundWorker가 실행됩니다. RunWorkerCompleted에는 BackgroundWorker가 계산하는 일부 데이터로 컨트롤을 업데이트해야합니다.BackgroundWorker에 내 응용 프로그램에서 잘못된 스레드
나는이를 설명하는 작은 샘플 구축이 있습니다. (다른 스레드가 그것을 소유하고 있기 때문에이 개체에 액세스 할 수 없습니다 호출 스레드) bw_RunWorkerCompleted()
에서
public partial class MyWindow : Window {
public MyWindow() {
InitializeComponent();
var bw = new BackgroundWorker();
bw.DoWork += bw_DoWork;
bw.RunWorkerCompleted += bw_RunWorkerCompleted;
bw.RunWorkerAsync();
}
void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) {
this.Title = "Calculated title";
}
void bw_DoWork(object sender, DoWorkEventArgs e) {
Thread.Sleep(3000);
}
}
은 내가 InvalidOperationException
를 얻을 수 있습니다. BackgroundWorker가 시작된 올바른 UI 스레드로 돌아 오지 않는 것 같습니다.
이 문제를 해결하기 위해 내가 도와 줄 수있는 사람이 있습니까? 내가 사용하는 프레임 워크에 있기 때문에 BackgroundWorker를 실행하는 코드를 변경할 수 없습니다. 하지만 RunWorkerCompleted-Event에서 다른 것을 할 수 있습니다. 그러나 나는이 문제를 해결하는 방법을 모른다.
왜 "새로운 UI 스레드를 만드시겠습니까?" 필요 없으며, 생산적이지 않으며이 문제의 근원입니다. –