在等待ShowDialog返回时同步一段代码

时间:2010-06-01 07:52:16

标签: .net vb.net winforms synchronization synclock

我在等待来自外部程序的响应时,如何在一段代码中锁定我的应用程序时遇到问题

我在表达式中带有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 个答案:

答案 0 :(得分: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