私はさまざまな場所で見たものに基づいてタイムアウト関数を作成しましたが、それをうまくやっていないと確信しています!(しかし、それは機能しているようです。)
私はハードウェアに接続しています。動作している場合は数秒で接続しますが、そうでない場合はタイムアウトに約1分かかります。したがって、独自のタイムアウト関数を作成できれば、それを20秒に設定して、多くの時間と待機を節約できます。
タイムアウトが文字列を返すようにしようとしました:
static string CallWithTimeout(Action action, int timeoutMilliseconds)
{
string reply = "";
Thread threadToKill = null;
Action wrappedAction = () =>
{
threadToKill = Thread.CurrentThread;
action();
};
IAsyncResult result = wrappedAction.BeginInvoke(null, null);
if (result.AsyncWaitHandle.WaitOne(timeoutMilliseconds))
{
reply = "Connected";
wrappedAction.EndInvoke(result);
return reply;
}
else
{
threadToKill.Abort();
reply = "Error";
return reply;
}
}
それから私はそれを次のようなもので呼びます:
string replyfromreader = CallWithTimeout(connectToHardware, 20000);
ライナーはconnectToHardware
1つだけなので、投稿する必要はありません。