2

在等待外部程序响应时,我无法弄清楚如何将我的应用程序锁定在一段代码之外

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函数没有返回值(因此我认为这会使代码部分保持锁定)。

程序中只有一个用于锁定的对象实例。

非常感谢您的帮助。

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 回答