2012-03-08 20 views
0

私はC#でアプリケーションを作成しました。しかし、フォームを閉じた後でも、アプリケーションは実行されます。つまり、.exeと.vshostファイルはまだ実行されています。だから私はアプリケーションを終了するには次のコードを使用している。しかし、それは終了していません。フォームを閉じた後にアプリケーションを終了する

public void Form1_Closing(object sender, FormClosingEventArgs e) 
    { 
     Process[] pArry = new Process[500]; 

     pArry = Process.GetProcesses(); 
     foreach (Process p in pArry) 
     { 
      string s1 = p.ProcessName; 
      s1 = s1.ToLower(); 
      if ((s1.Equals("new_prj.vshost"))) 
      { 
       p.Kill(); 
      } 
     } 
    } 

私のプロジェクト名はnew_prjです。 Button_Click関数で同じコードスニペットを書くと、正しく動作します。しかしフォームクロージング機能では動作しません。誰かが同じ問題を抱えていますか?

+1

フォームが実際に閉じられていない(おそらく、単に非アクティブにするか、または可視性をfalseに設定するなどの理由で)動作しないと思います - いずれにせよ、これは非常に醜いコードです...何も使用しませんこのように - 私の答えを見てください。 – Carsten

+1

また、これを行う場合は、Form.ClosingではなくForm.Closedを実行する必要があります。閉じるとはまだ閉じていないことを意味します! –

+0

「X」ボタンを押してフォームを閉じます。フォームを閉じずに隠すだけですか?次にそれを閉じる方法は? – ragz

答えて

1

どこからでもアプリケーションを終了したい場合は、Environment.Exit()を使用できますが、フォームの問題を解決することをお勧めします。より多くのコードを投稿すると、問題を見つけることができます。

+0

それは動作します。しかし問題は、Form_Closing関数に入っていないということです。 – ragz

2

これは使用できますか?

Application.Exit(); 
+0

これは機能します。しかし問題は、Form_Closing関数に入っていないということです。 – ragz

+0

ユーザーはActiveForm.Close()を使用できますか?フォームを閉じるとき? – Andrew

0

あなたもApplication.Exitを試すことができますが、カーステンが言ったように、あなたが原因ではなく症状を治療しようとしています。

2

これにはいくつかの理由が考えられます。 マルチスレッドアプリケーションの場合、プロセスの終了を妨げる別のスレッドが実行されている可能性があります。

さらに詳しい情報を入力してください。

EDIT

私は同様の質問を投稿してスレッドを使用する方法についていくつかの入力を得ました。 this postを参照してください。

public void Start() 
{ 
    workerThread = new Thread(() => DoWork()); 
    doWork = true; 
    workerThread.IsBackground = true; 
    workerThread.Start(); 
} 

お知らせIsBackground = true;:ここ

はポストへの回答からいくつかの便利なコードです。

+0

そのマルチスレッドアプリケーションです。私はForm_Closing関数内のすべてのスレッドを中止しています。私はそれがフォーム閉じ関数自体に入っていないと思います。 – ragz

+0

スレッドを中止するときは注意が必要です。どのようなトラブルが起こるかはわからず、トレッドを中断してもそれには時間がかかることがあります。 おそらく、スレッドを使用している方法を再考し、アプリケーションが終了する必要があるときにスレッドが作業を停止する必要があるかどうかを確認する必要があります。 –

+0

また、スレッドがバックグラウンド作業を行っている場合、バックグラウンドスレッドとして設定されていることを確認してください。バックグラウンドスレッドは、親プロセスに完全に従属する必要があります。 – Shibumi

0

Application.Exit()を使ってみましたか?

関連する問題