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

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

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

Re[8]: スレッドの中断についての質問


(過去ログ 25 を表示中)

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

■11206 / inTopicNo.1)  スレッドの中断についての質問
  
□投稿者/ Kin (1回)-(2007/12/10(Mon) 08:19:56)

分類:[C#] 

現在、C#でプログラミングを開発しております。初心者ですので、よろしくお願いします。

public delegate void MyMethod();
private Thread t1=null ;

public void btn_Download_Click(object sender, EventArgs e) //Go!
{
  Thread t1 = new Thread(new ThreadStart(DownloadThread_HTTP));
  t1.IsBackground = true;
t1.Start();
}

public void DownloadThread_HTTP() // download Thread
{
MyMethod DOWNLOAD_with_HTTP = new MyMethod(this.DOWNLOAD_with_HTTP);
this.BeginInvoke(DOWNLOAD_with_HTTP);
}

public void DOWNLOAD_with_HTTP()
{
......
}

private void button2_Click(object sender, EventArgs e) //pause button
{
t1.Join();
}

コードは 以上です。コンパイラは大丈夫ですけど、プログラムを実行するときに button2をクリックすると NullReferenceException例外エラーが出ます。t1の値がNullのためっていうことをわかりますけど、どうやれば t1の値がNullに出ないのですか?一番前にprivate Thread t1=null を設定するため?

ご教授ください、お願いいたします。


引用返信 編集キー/
■11207 / inTopicNo.2)  Re[1]: スレッドの中断についての質問
□投稿者/ れい (286回)-(2007/12/10(Mon) 08:51:36)
No11206 (Kin さん) に返信
> private Thread t1=null ;
このt1のスコープはクラス、

>
> public void btn_Download_Click(object sender, EventArgs e) //Go!
> {
>   Thread t1 = new Thread(new ThreadStart(DownloadThread_HTTP));
>   t1.IsBackground = true;
> t1.Start();
> }
このt1のスコープはメソッドで、

> private void button2_Click(object sender, EventArgs e) //pause button
> {
> t1.Join();
> }
このt1はクラススコープのt1をさしますので、

同じt1という名称の変数でも実際は違う変数であるというだけですね。
引用返信 編集キー/
■11229 / inTopicNo.3)  Re[2]: スレッドの中断についての質問
□投稿者/ Kin (2回)-(2007/12/10(Mon) 14:24:08)
No11207 (れい さん) に返信
> ■No11206 (Kin さん) に返信
>>private Thread t1=null ;
> このt1のスコープはクラス、
>
>>
>>public void btn_Download_Click(object sender, EventArgs e) //Go!
>>{
>>  Thread t1 = new Thread(new ThreadStart(DownloadThread_HTTP));
>>   t1.IsBackground = true;
>> t1.Start();
>>}
> このt1のスコープはメソッドで、
>
>>private void button2_Click(object sender, EventArgs e) //pause button
>>{
>> t1.Join();
>>}
> このt1はクラススコープのt1をさしますので、
>
> 同じt1という名称の変数でも実際は違う変数であるというだけですね。
-----------------------------------------------------------------

ポイントの指摘いただき有難うございます。
直し方はまだわかりませんので、別の変数にしても、
例えば:Thread t2 = new Thread(new ThreadStart(DownloadThread_HTTP));としたら
まだThreadStateExceptionの例外エラーが出ます。
お願いいたします。


引用返信 編集キー/
■11230 / inTopicNo.4)  Re[3]: スレッドの中断についての質問
□投稿者/ επιστημη (709回)-(2007/12/10(Mon) 14:31:27)
επιστημη さんの Web サイト
×> Thread t1 = new Thread(new ThreadStart(DownloadThread_HTTP));
○>        t1 = new Thread(new ThreadStart(DownloadThread_HTTP));

引用返信 編集キー/
■11236 / inTopicNo.5)  Re[4]: スレッドの中断についての質問
□投稿者/ Kin (4回)-(2007/12/10(Mon) 15:52:06)
No11230 (επιστημη さん) に返信
> ×> Thread t1 = new Thread(new ThreadStart(DownloadThread_HTTP));
> ○> t1 = new Thread(new ThreadStart(DownloadThread_HTTP));
>


本当に有難うございます。Thread t1中のThreadを抜いてから例外エラーがでなくなりました。
引用返信 編集キー/
■11237 / inTopicNo.6)  Re[5]: スレッドの中断についての質問
□投稿者/ επιστημη (711回)-(2007/12/10(Mon) 15:54:39)
επιστημη さんの Web サイト
> 本当に有難うございます。Thread t1中のThreadを抜いてから例外エラーがでなくなりました。

"何故"うまくいくのか/Threadが付いてると"何故"ダメなのか、
ちゃんと理解しておきましょーね♪

引用返信 編集キー/
■11238 / inTopicNo.7)  Re[6]: スレッドの中断についての質問
□投稿者/ なちゃ (81回)-(2007/12/10(Mon) 16:58:19)
ところで、細かくは見てないんですが、Threadとデリゲートの非同期呼び出しを
併用してるのはなぜでしょう?
引用返信 編集キー/
■11239 / inTopicNo.8)  Re[7]: スレッドの中断についての質問
□投稿者/ なちゃ (82回)-(2007/12/10(Mon) 17:16:10)
No11238 (なちゃ さん) に返信
> ところで、細かくは見てないんですが、Threadとデリゲートの非同期呼び出しを
> 併用してるのはなぜでしょう?

違う、すみません、読み間違いでした。

引用返信 編集キー/
■11247 / inTopicNo.9)  Re[6]: スレッドの中断についての質問
□投稿者/ Kin (5回)-(2007/12/10(Mon) 21:25:08)
No11237 (επιστημη さん) に返信
>>本当に有難うございます。Thread t1中のThreadを抜いてから例外エラーがでなくなりました。
>
> "何故"うまくいくのか/Threadが付いてると"何故"ダメなのか、
> ちゃんと理解しておきましょーね♪
>
-------------------------------------------------------
有難うございます。
Threadがあると 限定される意味でしょう。
もし答え間違いましたら、正しいのをご教授ください。
引用返信 編集キー/
■11254 / inTopicNo.10)  Re[7]: スレッドの中断についての質問
□投稿者/ HiJun (83回)-(2007/12/11(Tue) 00:01:48)
れいさんが回答した内容の通りです。



引用返信 編集キー/
■11264 / inTopicNo.11)  Re[8]: スレッドの中断についての質問
□投稿者/ Mr.T (137回)-(2007/12/11(Tue) 10:11:36)
Mr.Tです、こんにちは。

HiJunさんが示しているのは、簡単に言えば、ここですね。
>同じt1という名称の変数でも実際は違う変数であるというだけですね。

本質的には、ここです。

>このt1のスコープはクラス、
>このt1のスコープはメソッドで、
>このt1はクラススコープのt1をさしますので、


引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -