代码之家  ›  专栏  ›  技术社区  ›  Skittles

匿名方法-c到vb.net

  •  2
  • Skittles  · 技术社区  · 17 年前

    我需要在终端服务器上实现应用程序的单个vb.net实例。为此,我使用的代码来自 Flawless Code 博客。它工作得很好,除非代码是用C编写的,并且使用了一个匿名方法,这在vb.net中不受支持。我需要重写以下内容,以便在vb.net中将其用作事件。

    static Form1 form;
    
    static void singleInstance_ArgumentsReceived(object sender, ArgumentsReceivedEventArgs e)
        {
            if (form == null)
                return;
    
            Action<String[]> updateForm = arguments =>
                {
                    form.WindowState = FormWindowState.Normal;
                    form.OpenFiles(arguments);
                };
            form.Invoke(updateForm, (Object)e.Args); //Execute our delegate on the forms thread!
        }
    }
    
    3 回复  |  直到 8 年前
        1
  •  6
  •   Tereza Tomcova Spontifixus    17 年前

    您可以使用此代码:

    Private Shared form As Form1
    
    Private Shared Sub singleInstance_ArgumentsReceived(ByVal sender As Object, ByVal e As ArgumentsReceivedEventArgs)
        If form Is Nothing Then Return
        form.Invoke(New Action(Of String())(AddressOf updateFormMethod), e.Args)
    End Sub
    
    Private Shared Sub updateFormMethod(ByVal arguments As String())
        form.WindowState = FormWindowState.Normal
        form.OpenFiles(arguments)
    End Sub
    
        2
  •  4
  •   Paul van Brenk    17 年前

    在Vs2010的vb.net中,可以执行以下操作:

    Shared form As Form1
    Shared Sub singleInstance_ArgumentsReceived(ByVal sender As Object, ByVal e As ArgumentsReceivedEventArgs)
        If form Is Nothing Then Return
    
        Dim updateForm As Action(Of String()) = Sub(arguments)
                                                    form.WindowState = FormWindowState.Normal
                                                    form.OpenFiles(arguments)
                                                End Sub
    
        form.Invoke(updateForm, e.args)
    
    End Sub
    
        3
  •  3
  •   Fabrício Matté    17 年前

    这是:

    public void Somemethod()
    {
        Action<String[]> updateForm = arguments =>
            {
                form.WindowState = FormWindowState.Normal;
                form.OpenFiles(arguments);
            };
    }
    

    将与以下内容相同:

    public void Somemethod()
    {
        Action<String[]> updateForm = OnAction;
    }
    
    //named method
    private void OnAction(string[] arguments)
    {
        form.WindowState = FormWindowState.Normal;
        form.OpenFiles(arguments);
    }
    

    然后,您可以轻松地将vb.net转换为以下类型:

    Public Sub SomeMethod()
    
        Dim updateForm As Action(Of String()) = New Action(Of String())(AddressOf Me.OnAction)
        Me.form.Invoke(updateForm, New Object() { e })
    
    End Sub
    
    Private Sub OnAction(ByVal arguments As String())
        form.WindowState = FormWindowState.Normal
        form.OpenFiles(arguments)
    End Sub
    
    推荐文章