WPF에서 스레딩에 문제가 있습니다. 복잡한 사용자 인터페이스를 만들고 싶습니다. 그리고 나서 그것을 메인 윈도우에 추가하고 싶습니다. 이 복잡한 사용자 인터페이스를 생성하는 동안 내 메인 창에 진행률 표시 줄을 표시하고 싶습니다. 나는 이것이 쓰레드로만 만들어 질 수 있다고 생각한다. 그러나 문제가 있습니다. 작성된 요소는 별도의 스레드에서 작성되므로 기본 창에 추가 할 수 없습니다. 백그라운드 스레드에서 생성 된 UIElements를 주 스레드로 전송할 가능성이 있는지 아는 사람이 누구인지 확인하십시오. 간단한 방법으로 시도하면 객체가 별도의 스레드에 있기 때문에 액세스 할 수 없다는 메시지가 표시됩니다. 이미 진행 바 스레드를 안전하게 만들었습니다.백그라운드 스레드에서 요소를 만든 다음 주 인터페이스에 추가하십시오.
다음 예는 내가 원하는 것보다 조금 더 설명하기를 바랍니다.
StackPanel tcForm = new StackPanel();
Semaphore loadedSema = new Semaphore(0,1);
Thread thread = new Thread(new ThreadStart(delegate(){
//Formular should be created in background
tcForm.Children.Add(new Formular());
ProgressBar.AddProgress();
//...other things
loadedSema.Release();
}));
thread.start();
loadedSema.WaitOne();
new Formular()
는 매우 오랜 시간 실행, 그래서 백그라운드에서 만드는 방법에 대해 생각했다.
Formular
을 변수에 추가 한 다음 주 스레드를 추가하는 것도 불가능합니다.
//this is also impossible
//in background-thread
form = new Formular
//in main-thread
tcForm.Children.Add(form);
나는이 방법이 있기를 바랍니다. 어떤 조언,
감사가있는 경우 당신이 원하는 모든 업데이트가 진행 표시 줄 (또는 유사) 인 경우 다음 메인 스레드에서 앞까지 모든 UI를 만들어야 마틴
입니다. 그러나이 방법을 사용하면 문제는 진행 표시 줄이 다른 창에 있어야한다는 것입니다. 그리고이 창은 주 창 자식이 될 수 없습니다. – martin