新しい情報を古い情報と比較した後、情報をオブジェクトにフィードする特定のアプリケーションがあります。それは次のようになります
set
{
oldval=_value;
_value=value;
if (some comparison logic)
raiseEvent();
}
これはすべて、断続的に 100 ミリ秒スリープする無限ループのバックグラウンド スレッドで発生します。本当に奇妙な部分は、初めて機能し、比較ロジックが true になり、イベントが発生することです。その後、情報は流れ続け、オブジェクトに入り続けます。私は MessageBoxes を常に古い値と新しい値を表示するように設定しているので、これを知っていますが、どういうわけか set 句をバイパスしているかのようです! 句の先頭にメッセージボックスを設定しましたが、ポップアップしません! 値が更新され続けると確信しているので、これは本当に奇妙です。
何かご意見は?
ええ、わかっていますが、残念ながらこれ以上はお見せできません... 全体的な構造をもう一度説明してみましょう。別のバックグラウンド スレッドが無限ループを実行しています。このループは、Data オブジェクトからデータを継続的にプルします。このデータは、他の一連のスレッドによって更新されます。もちろん、これらはすべて Monitor.Enter および Exit と同期しています。次に、Data オブジェクトから取得されたデータが Comparer オブジェクトに入力されます。
while(true)
{
Thread.Sleep(100);
Monitor.Enter(Data);
Comparer.Value = Data.Value;
Monitor.Exit(Data);
}
Comparer.Value は、最初の投稿で言及したプロパティです。ループの最後に MessageBox を設定したため、非常に奇妙です。
MessageBox.Show(Comparer.Value + " - " + Data.Value);
値は実際に更新されますが、どういうわけかset句をバイパスしているように見えますが、これは不可能です...これは本当に奇妙です。
ロブ、ループはチェックをまったく行わず、Comparer.Value への情報のストリームをシミュレートするだけです。set 句には比較ロジックが含まれています。
bh213、その通りだと思いますが、意味のあるチェックが行われる前に比較が停止するため、わかりません。
わかりました、問題を解決しました。どうやら私の質問が間違っていたようです。問題はまったく別の場所にありました。ご協力ありがとうございます。質問はクローズされる可能性があります。