.net 在等待ShowDialog返回时同步锁定一段代码

.net 在等待ShowDialog返回时同步锁定一段代码,.net,vb.net,winforms,synchronization,synclock,.net,Vb.net,Winforms,Synchronization,Synclock,我在解决如何在应用程序等待外部程序响应时将其锁定在代码段之外的问题时遇到困难 我已经在表达式中带有Me对象的代码段上使用了Synclock。在这个Synclock中,我调用了一个对话框的重写ShowDialog方法,该方法有一个超时参数,但一旦设置了计时器,就会从底层的ShowDialog函数调用返回值。像这样工作 SyncLock Me Dim frmDlgWithTimeout As New frmDlgWithTimeout ' dialog box with ov

我在解决如何在应用程序等待外部程序响应时将其锁定在代码段之外的问题时遇到困难

我已经在表达式中带有
Me
对象的代码段上使用了
Synclock
。在这个
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
函数没有返回值(因此我认为会保持代码部分锁定)

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


非常感谢您的帮助。

我个人不使用VB.NET的synchlock功能,因为我发现它很挑剔。我想创建一个表单范围,例如:

dim lock as boolean = false
然后我使用这个布尔值作为我的synchlock,如下例所示

 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

我个人不使用VB.NET的synchlock功能,因为我发现它很挑剔。我想创建一个表单范围,例如:

dim lock as boolean = false
然后我使用这个布尔值作为我的synchlock,如下例所示

 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

我确实同意这种方法,因为SyncLock用于具有多个线程的同一进程。不在不同的进程中。我同意这种方法,因为SyncLock是在同一个进程上使用的,有多个线程。不是在不同的过程中。