2011-09-10 11 views
5

別のスレッドからSystem.Windows.Forms.Application.Run()を呼び出して発行されたメッセージループをきれいに終了する方法はありますか?C# - Application.Run()を終了する

Thread messageLoop = new Thread(() => Application.Run()); 
messageLoop.SetApartmentState(ApartmentState.STA); 
messageLoop.Start(); 
//How to terminate thread like on Application.ExitThread() without calling Thread.Abort()? 

ありがとうございます!

答えて

11

ApplicationContextクラスを使用して、スレッドへの参照を保持します。このように:

ApplicationContext threadContext; 

    private void startLoop() { 
     threadContext = new ApplicationContext(); 
     var messageLoop = new Thread(() => Application.Run(threadContext)); 
     messageLoop.Start(); 
    } 

    private void stopLoop() { 
     threadContext.ExitThread(); 
     threadContext = null; 
    } 
+1

ビートya 1秒! ;-) –

+1

Hehe、サンプルコードのテストに1秒以上かかりました。 –

+1

Humph、testing schmesting! –