2017-03-06 5 views
0

배경 작업자에서 코드의 주요 부분을 실행할 수없는 이유로 백그라운드 작업자에서로드 대화 상자를 실행할 수 있지만 주 코드 부분 실행 후 대화 상자를 닫아야합니다. 나는 다음을 implimented했지만 나는 강제로 코드 실행 후 백그라운드 작업자를 닫 방법을 잘 모르겠어요 :Dialog in BackgroundWorker

LoaderWorker = new BackgroundWorker(); 

    //Loading is the Form 
    Loading Loader = new Loading("Daten Exportieren"); 

    LoaderWorker.DoWork += (s, args) => 
    { 
    //Show Loading Dialog 
    Loader.Show(); 
    }; 

    ExecuteMainTasks(); 

    //Here i need to stop the backgroundworker after the method above is complete. 

배경 직원이에 대한 해결책이 아니면 난을 보장하기 위해 다른 방법을 사용해야합니다 로더의 UI 스레드를 잠그지 마십시오. 기억해라. 나는 backgroundworker에서 주 코드를 실행할 수 없으므로 이것을 다소 뒤로 관리해야한다.

감사합니다.

답변

0
Control.Invoke 
Control.BeginInvoke 

(Windows Forms의)

또는

Disopatcher.Invoke 
Dispatcher.BeginInvoke 

(WPF)

또는

CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync 

(WinRT)

백그라운드 작업자로부터 이것을 호출하면 전달 된 λ/delegate가 UI 스레드에서 실행됩니다. 백그라운드 작업자가 진행/완료 알림을 수행하면됩니다.

그래서 UI 스레드에서 대화 상자를 표시 한 다음 백그라운드 작업자를 시작하면 UI 스레드에서이 코드를 실행할 수 있습니다.

사용자가 대화 상자를 닫을 때 백그라운드 작업자를 동 기적으로 중지해야합니다.

+0

감사합니다 Yeoman하지만 C# 6을 사용 중이며 Dispatcher.BeginInvoke 또는 관련 어셈블리에 대한 참조를 찾을 수 없습니다. 혹시 이것이 함축 된 방법에 대한 간단한 예를 들으십니까? 배경 작업자의 형태로 애니메이션 GIF를 실행하고 배경 작업자의 복잡한 작업을 수행 한 후 배경 작업자를 닫으려고합니다. 매우 후진하지만이 방법으로해야합니다. –

+0

어떤 UI 프레임 워크를 사용하고 있습니까? Windows Forms, WPF 또는 WinRT? – yeoman

+0

WinRT는 이제 범용 Windows 응용 프로그램, btw라고합니다. – yeoman