문제

그것에 관한 제목입니다. IPC 용 WCF 물건이있는 WPF 앱. 나는 전화한다 Application.Current.Shutdown() 그리고 앱은 행복하게 계속됩니다. 나는 생각했다 Shutdown 막을 수 없어야했습니다.

아마도 배경 스레드에서 호출 되었기 때문에? 디스패처 피들링을해야합니까?

도움이 되었습니까?

해결책

내가 전화 할 때 예외가 발생합니다 Application.Current.Shutdown 메인 스레드 이외의 스레드에서는 이미 "디스패처 피드 링"을 적절하게 사용하는 곳을 가정합니다.

어쨌든, 이것은 응용 프로그램을 컴파일하고 종료하므로 디스패처 비트가 당신이 가진 것과 같지 않으면 다음을 슬링 할 수 있습니다.

ThreadStart ts = delegate()
    {
        Dispatcher.BeginInvoke((Action)delegate()
        {
            Application.Current.Shutdown();
        });
     };
 Thread t = new Thread(ts);
 t.Start();

다른 팁

내 경험에 따라 모든 스레드는 응용 프로그램이 닫히려면 명시 적으로 종료되거나 배경 스레드로 표시되어야합니다.

다음은 백그라운드에서 읽기 스레드를 시작하는 예입니다.

_readThread = new Thread(new ThreadStart(ReadThread));
_readThread.Name = "Receiver";
_readThread.Priority = ThreadPriority.Highest;
_readThread.IsBackground = true;
_readThread.Start();

그만큼 IsBackground 속성이 핵심입니다. 설정되지 않으면 셧다운을 호출 할 때 스레드가 종료되지 않습니다.

나는 단지 경험한다 Application.Current.Shutdown Visual Studio에서 실행할 때 작동하지 않습니다. Visual Studio (최소한 2010 년 버전) 내에서 Application.Current.Shutdown 일을하지 않습니다. 스텝을 하나의 단계를 통과하면이 라인을 실행 한 다음 계속합니다. Windows 탐색기에서 프로그램 (.Exe)을 실행하면 Application.Current.Shutdown 잘 작동합니다.

디버그 중에 다른 스레드가 활성화되어 있기 때문에 이것에 대한 설명이있을 수 있지만 설명 할 수는 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top