2

外部プログラムからの応答を待っている間に、コードのセクションからアプリケーションをロックアウトする方法を理解するのに問題があります

式にオブジェクトが含まれるSynclockコードのセクションで使用しました。Meこれでは、タイムアウトパラメータを持つダイアログボックスのSynclockオーバーライドされたメソッドを呼び出しますが、タイマーが設定されると、基になる関数呼び出しから値を返します。このように動作します。ShowDialogShowDialog

    SyncLock Me
        Dim frmDlgWithTimeout As New frmDlgWithTimeout ' dialog box with overridden ShowDialog '
        Dim res As DialogResult = frmDlgWithTimeout.ShowDialog(10 * 1000) ' 10 sec timeout '
    End SyncLock

これで、外部プログラムがアプリケーションをこれに導くイベントを発生させる可能性がありますが、関数が値を返さない場合でも(したがって、コードのセクションがロックされたままになると思った場合でも)、アプリケーションがアプリケーションにSynclock入るのを妨げることはありません。ShowDialog

プログラムのロックに使用されるオブジェクトのインスタンスは1つだけです。

あなたの助けは大歓迎です。

4

1 に答える 1

0

個人的には、VB.NETの同期機能を使用していません。これは、気難しいことがわかったためです。フォームスコープのブール値を作成するのが好きです。

dim lock as boolean = false

次に、以下の例のように、このブール値をシンクロロックとして使用します。

 Sub LockUntilShowDialogOkSelected()
    If Not lock Then
      lock = True
      Dim frmDlgWithTimeout As SaveFileDialog ' dialog box with overridden ShowDialog '

      If frmDlgWithTimeout.ShowDialog = Windows.Forms.DialogResult.OK Then
        lock = False
      End If
    End If
  End Sub
于 2010-09-10T12:44:53.033 に答える