0

無限ループでいくつかの変数を読み取る必要があります。ブール値のステータスが変更された場合は、何かを行う必要があります。Do...Loop を使用しようとしましたが、アプリケーションがクラッシュします。Visual Basic 6 で、悪臭を放つことなく無限ループを使用する方法はありますか?

私のコード:

Do
   asd1 = readValue1
   asd2 = readValue2
   If asd1 <> asd1ex Then
       Text1.Text = "yes"
   End If
   If asd2 <> asd2ex Then
       Text1.Text = "no"
   End If
Loop While True
4

2 に答える 2

2

ループの代わりにタイマーを作成し、そのタイマーでステータスを確認します。

データがどこから来ているかを説明したコメントの後に解決しました(非同期COMコンポーネントのプロパティ):

リアルタイム クライアント サーバー プロジェクトで vb6 IDE を使用しています。いくつかの変数を読み取る必要があり、これらのいずれかがステータスを変更すると、サーバーにソケット メッセージが送信されます。睡眠と同じようにくっついた

役に立たなかったもの: DoEvents と sleep

 DoEvents 
 Sleep 100

役立つかもしれませんが、windows 関数のスリープを参照する必要があります。しかし、VB6 はシングル スレッド (1 つは UI 用、もう 1 つはロジック用) であるため、ループから抜け出す方法が必要です。あなたは本当に何をしようとしていますか?トップレベルで説明できますか?

VB6 IDE または Office の VBA コードで作業していますか?

スリープを機能させるには、次のように宣言します。

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

こちらもご覧ください https://stackoverflow.com/a/4540553/1643558

値 1 と 2 を読み取るためにユーザーにフォームを表示する場合は、モーダル フォームを使用して、完了時にクリックするボタンを設定し、値が気に入った場合にのみフォームを非表示にすることができます。その場合、ループする必要はありません。モーダル フォームでもエラー MsgBox を表示できます。

http://www.tek-tips.com/viewthread.cfm?qid=1117372を参照してください。

おそらくスリープを削除し、DoEvents のみを保持します。

ループの代わりにタイマーを作成し、そのタイマーでステータスを確認することもできます

于 2013-05-17T17:45:34.567 に答える
0

一種のイベント ハンドラーを設定しようとしているようです。実際には、ループは変数への変更を「リッスン」しています。変数がどのように変更されるかを説明していませんが、これは重要です。変数の変更によってイベントが発生する可能性がある場合は、問題はありません。ループをなくして、イベント ハンドラーを使用してソケット メッセージを送信できます。(これがおそらく、Deanna が変数がどのように変化するかを尋ねた理由です。) これは、あなたが望むことを行うための推奨される方法です。そのため、変数が変化した場合にイベントを発生させる方法を見つける必要があります。

于 2013-05-17T18:35:54.510 に答える