Синхронизировать часть кода в ожидании возврата 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