【问题标题】:Synclock a section of code while waiting for ShowDialog to return在等待 ShowDialog 返回时同步一段代码
【发布时间】:2010-06-01 07:52:15
【问题描述】:

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

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

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

非常感谢您的帮助。

【问题讨论】:

    标签: .net vb.net winforms synchronization synclock


    【解决方案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
    

    【讨论】:

    • 我同意这种方法,因为 SyncLock 用于具有多个线程的同一进程。不在不同的进程中。
    猜你喜欢
    • 1970-01-01
    • 2017-02-10
    • 1970-01-01
    • 2019-04-06
    • 2020-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多