Синхронизировать часть кода в ожидании возврата ShowDialog

Мне не удается решить, как заблокировать приложение из раздела кода, пока оно ожидает ответа от внешней программы

Я использовал Synclock на участке кода с Me объект в выражении. В этом Synclock Я называю переопределенным ShowDialog метод диалогового окна, которое имеет параметр тайм-аута, но возвращает значение из базового ShowDialog вызов функции, как только таймер настроен. Работает так

    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 ответ

Решение

Лично я не использую функциональность синхронизатора 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
Другие вопросы по тегам