C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: threadを確実に終了する方法について質問があります。


(過去ログ 60 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■34397 / inTopicNo.1)  threadを確実に終了する方法について質問があります。
  
□投稿者/ young (1回)-(2009/03/28(Sat) 09:46:42)

分類:[C#] 

.NET Framework3.5でC#で開発をしているものです。XPです。
threadを確実に終了する方法について質問があります。
常時動かしたい処理をスレッドにして、終了時にスレッドをとめて終了したいと思っています。
Webなどを見て、次のようにしてみました。
ところが、ボタンを押して終了しても、タスクマネージャで見ると、まだメモリに残っています(終了できることもあります)。
確実にスレッドをとめて終了するにはどうしたらよいでしょう?

namespace threadTest	{
public partial class threadTest : Form	{
public threadTest()	{
InitializeComponent();
Thread tread = new Thread(new ThreadStart(this.ThreadTask));
tread.IsBackground = true;
tread.Start();
}

private void ThreadTask(){
string[] lines = {"1","2","3"};
for (int i = 1; ; i++){foreach(string line in lines) {textBox.Text = textBox.Text + line;}}
}

private void endbutton_Click(object sender, EventArgs e) {
Application.Exit();Close();
}
}
}

private void endbutton_Click(object sender, EventArgs e) {
this.Dispose();
Application.Exit();Close();
}

private void endbutton_Click(object sender, EventArgs e) {
this.Dispose();
Thread.Sleep(200);
Application.Exit();Close();
}

などを試してみましたが、うまく終了できません。
ご教示願います。

引用返信 編集キー/
■34402 / inTopicNo.2)  Re[1]: threadを確実に終了する方法について質問があります。
□投稿者/ とっちゃん (385回)-(2009/03/28(Sat) 11:05:02)
とっちゃん さんの Web サイト
No34397 (young さん) に返信

http://blogs.wankuma.com/tocchann/archive/2009/03/11/169523.aspx

これなんかどうでしょ?


引用返信 編集キー/
■34405 / inTopicNo.3)  Re[1]: threadを確実に終了する方法について質問があります。
□投稿者/ 渋木宏明(ひどり) (1107回)-(2009/03/28(Sat) 11:19:11)
渋木宏明(ひどり) さんの Web サイト
> Webなどを見て、次のようにしてみました。

めちゃくちゃ。

> public threadTest() {
> InitializeComponent();
> Thread tread = new Thread(new ThreadStart(this.ThreadTask));
> tread.IsBackground = true;
> tread.Start();
> }

new した Thread がうっちゃらかし。
これじゃ、コンストラクタを抜けた後にスレッドの制御のしようがない。

でも、thread.IsBackground = true してるから、アプリケーション終了時にこのスレッドが居残ることでプロセスが居座る可能性は無い。

> private void endbutton_Click(object sender, EventArgs e) {
> Application.Exit();Close();
> }
> }
> }
>
> private void endbutton_Click(object sender, EventArgs e) {
> this.Dispose();
> Application.Exit();Close();
> }
>
> private void endbutton_Click(object sender, EventArgs e) {
> this.Dispose();
> Thread.Sleep(200);
> Application.Exit();Close();
> }

通常の Windows.Forms アプリケーションなら、Close() すればアプリケーションは終了します。
Dispose() や Application.Exit() は必要ありません。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -