0

これについて多くの質問があることは知っていますが、どれも私とはうまくいきませんでした。問題は、いくつかの MODBUS デバイスを読み取っているスレッドがあり、読み取りを開始/停止できるようにしたいということです。接続を選択するとスレッドを開始し、切断を選択するとスレッドを中止します。中止されたスレッドを開始すると、次の例外が発生します。

System.Threading.ThreadStateException: スレッドは既に開始されています。at (wrapper managed-to-native) System.Threading.Thread:Thread_internal (System.Threading.Thread,System.MulticastDelegate) at System.Threading.Thread.Start () [0x00000] in :0 at Vyshka.MainClass.Main ( System.String[] args) [0x00096] in /home/Vyshka/Main.cs:53

4

3 に答える 3

1

新しいスレッドを作成します。スレッドを再開することはできません。

ところで、(ほとんど) スレッドを中止するべきではありません。Stack Overflow でそれについて多くの議論があり、これによりプログラムが本質的に壊れる理由が説明されています。

于 2012-10-29T09:54:18.967 に答える
1

中断されたスレッドを再起動しようとすることは言うまでもなく、スレッドを中断することは一般的に決して良い考えではありません。代わりに、毎回新しいスレッドを生成し、古いスレッドを単独で中止させます。

または、デバイスとの間の読み取りを制御するスレッドに login を配置してMODBUS、スレッドをまったく中止する必要がないようにします。

于 2012-10-29T09:54:29.873 に答える
0

この問題の最善の解決策は、変数を NULL 化してから、新しいポインターを割り当てることです。

于 2012-10-29T10:14:37.307 に答える