DOBON.NET DOBON.NETプログラミング掲示板過去ログ

BeginInvoke で起動したスレッドの強制終了

環境/言語:[XP(SP2) Framework1.1]
分類:[.NET]

BeginInvoke で起動したスレッドを強制終了する方法はありませんでしょうか?
nothingを設定しただけでは終了していないようです。
■No16197に返信(夏さんの記事)
> BeginInvoke で起動したスレッドを強制終了する方法はありませんでしょうか?
> nothingを設定しただけでは終了していないようです。

もちろんこれでは終わりません。
基本的には終われっていうイベントを用意して途中で処理をやめるようにするか、フラグを設定して、それを見て判断してやめるようにBeginInvokeで呼ばれる側に仕込むべきでしょう。
> もちろんこれでは終わりません。
> 基本的には終われっていうイベントを用意して途中で処理をやめるようにするか、フラグを設定して、それを見て判断してやめるようにBeginInvokeで呼ばれる側に仕込むべきでしょう。

お返事ありがとうございます。
正常終了時にはフラグを使用しているのですが、実はスレッド中でエラーが
発生しているらしく途中でスレッドを抜けてしまっているらしいのです。
途中で抜けているので、スレッド自体はまだ存在している、みたいな変な状態
になっていまして、.Abort のような強制終了の方法がないかとお聞きした次第です。
勿論エラーの原因を見つけるのが最重要なのですが・・・
> 正常終了時にはフラグを使用しているのですが、実はスレッド中でエラーが
> 発生しているらしく途中でスレッドを抜けてしまっているらしいのです。
> 途中で抜けているので、スレッド自体はまだ存在している、みたいな変な状態
> になっていまして、.Abort のような強制終了の方法がないかとお聞きした次第です。

スレッドが異常終了したのなら、「スレッド自体はまだ存在している」状態にはならないはずですよ?

> 勿論エラーの原因を見つけるのが最重要なのですが・・・

そのとおりです。
スレッド関数の最上位に try ~ catch を仕掛けても、有効な情報が拾えないんですか?
> スレッドが異常終了したのなら、「スレッド自体はまだ存在している」状態にはならないはずですよ?
>
>>勿論エラーの原因を見つけるのが最重要なのですが・・・
>
> そのとおりです。
> スレッド関数の最上位に try ~ catch を仕掛けても、有効な情報が拾えないんですか?
>

ありがとうございます。

それが参照するとNothingになっていないのです。

Try -Catch はスレッドの中頃にあります。
このCachにはかからないで抜けています。
先頭で宣言すればかかるのでしょうか?
> それが参照するとNothingになっていないのです。

参照の有無とスレッドが生きているかどうかは全く関係ありません。


> Try -Catch はスレッドの中頃にあります。
> このCachにはかからないで抜けています。
> 先頭で宣言すればかかるのでしょうか?

そう言われても答えようがありませんよ。
取りあえずやってみたらいかがでしょう。
Debug.WriteLine などを使って逐次状況を出力するとか。

DOBON.NET | プログラミング道 | プログラミング掲示板