VB.NET 中 C# BeginInvoke((Action)) 的等价物

Equivalent of C# BeginInvoke((Action)) in VB.NET

我需要将以下 C# 代码转换为 VB.NET:

if (this.InvokeRequired)
{
    this.BeginInvoke((Action)(() =>
    {
        imageMutex.WaitOne();
        pbCamera.Image = (Bitmap)imageCamera.Clone();
        imageMutex.ReleaseMutex();
    }));
}

我试过这样的:

If Me.InvokeRequired Then
    Me.BeginInvoke((Action)(Function()
        imageMutex.WaitOne()
        pbCamera.Image = CType(imageCamera.Clone(), Bitmap)
        imageMutex.ReleaseMutex()
   ))
End If

但是编译器告诉我Action是一个类型,不能用作表达式。 VB.NET?

这样的delegate怎么写

直译为:

    If Me.InvokeRequired Then
        Me.BeginInvoke(DirectCast(
            Sub()
                imageMutex.WaitOne()
                pbCamera.Image = DirectCast(imageCamera.Clone(), Bitmap)
                imageMutex.ReleaseMutex()
            End Sub, 
            Action)
        )
    End If

正如其他人所指出的,您不需要将 lambda 转换为 Action:

    If Me.InvokeRequired Then
        Me.BeginInvoke(
            Sub()
                imageMutex.WaitOne()
                pbCamera.Image = DirectCast(imageCamera.Clone(), Bitmap)
                imageMutex.ReleaseMutex()
            End Sub
        )
    End If

https://codeconverter.icsharpcode.net 很好地转换了它。如果您在 C# 中找到所需的代码但在转换的几个方面遇到困难,则可能需要考虑一下