私はC#とWPFを使用してVisual Studio 2015でプロジェクトを開発しています。時々、私はcloseコマンドで実行中のプロジェクトを終了し、時にはstop debugボタンで終了します。問題は、いくつかのテストの後に、私のPCが暖かくなり、ファンが騒音を発することです。私はマシンを落ち着かせるためにVisual Studioを終了する必要があります。スレッドが正しく終了していない参照
- どのようにテストした後に終了していないスレッドを参照するには:
は、だから私は疑問を持っていますか?
- 私がそれらを知っているとき、それらをいかに適切に終了するのですか? (実際にのスレッドがある場合
WindowClosing
) - デバッグの停止ボタンを使用するとスレッドが正しく終了するようにしますか?
タスクマネージャのスクリーンショットがあります:
はあなたに
EDITありがとうございます。アプリケーションを起動すると、CPUが5%から15%(またはイベント25%)に上昇します。 RAMは4GOから4.5に上昇します。 アプリケーションを停止すると、CPUは数秒間45%に戻り、5%に戻りますが、RAMは4.70GOに戻り、戻りません。
EDIT2:
私は自分のアプリケーション上のスレッドは、この種の設立:スレッドを使用するために本当に良い方法があるかどう
private bool isClosing = false;
public void Start()
{
isClosing = false;
ThreadPool.QueueUserWorkItem(new WaitCallback(doWorkThread));
}
public void Stop()
{
isClosing = true;
}
private AutoResetEvent endPoolStateButton = new AutoResetEvent(false);
private void doWorkThread(object sender)
{
Action action = new Action(() => doWork());
while (!isClosing)
{
Thread.Sleep(100);
this.Dispatcher.BeginInvoke(action, System.Windows.Threading.DispatcherPriority.Background);
}
endPoolStateButton.Set();
}
private void doWork()
{
/* Job performed */
}
かしら?アプリケーションをisClosing = true
を設定せずに閉じると、決して停止しません。スレッドは決して実際に中断されませんか?あなたはこの種のスレッドが私の持つすべてのトラブルを引き起こすと思いますか?
は、タスクマネージャを見て、何が起こっているかチェックしてください。あなたがそれを「閉じた」後にアプリがまだ動いている場合。大量のRAMが必要な場合CPUが100%で動作している場合... –
新しいスレッドをどのように開始し、どのように終了するのですか?そして、「いくつかのスレッドを処理する」とはどういう意味ですか?スレッドは使い捨てではありません。また、アプリケーションの終了前にすべてのフォアグラウンドスレッドを終了させる必要があります。 – Luaan
私はこのアプリケーションの唯一の開発者ではありません、私はそれに取り組む前にいくつかの機能が開発されています。だから私はすべてのスレッドが開始/終了hawを知らないので、私は質問をしています。たとえば、私はバックグラウンドウォーカーを使用し、それを中止します(Disposeではなく、間違いのために申し訳ありません)[そこから作成](http://stackoverflow.com/questions/800767/how-to-kill-background-worker-completely) –