シリアル デバイスからデータを取得し、このプロトコルを処理できる特定のプログラムがアクセスできるサーバーにデータを配置するプログラムがあります。このサーバーは、アクティブ x コントロールの形をしたサードパーティ プログラムです。
残念なことに、ハードウェア デバイスには Thread.Sleep が必要です。サーバーを監視するプログラムは、スレッドがスリープしている間にサーバーにクエリを実行することがあります。これにより、サーバーに障害が発生したと見なされます。
私の次のアイデアは、サーバー タスク専用の別のスレッドにサーバーを配置することでした。UI スレッドで、次のコードを実行します。
Thread workerThread = new Thread(DoServerWork);
workerThread.SetApartmentState(ApartmentState.STA);
workerThread.Start();
デリゲートでは、私は持っています
public void DoServerWork()
{
rtu = new AxASMBSLVLib.AxASMBSLV();
rtu.CreateControl();
rtu.BeginInit();
rtu.OpenPort();
while (true)
{
}
}
問題は、サーバーが動作を開始してから約 5 秒で応答しなくなることです。私の最初の考えは、スレッドが終了していることですが、 while(true) はそれが起こらないようにする必要があります。何かご意見は?