Vb.net AdressOf方法签名

Vb.net AdressOf方法签名,vb.net,.net-2.0,begininvoke,Vb.net,.net 2.0,Begininvoke,既然我不能输入参数,我怎么能尊重以下签名 Private Sub SetFocusToRow(ByRef ultraGridRow As Infragistics.Win.UltraWinGrid.UltraGridRow) grdSoldeOuverture.ActiveCell = ultraGridRow.Cells(0) grdSoldeOuverture.PerformAction(Infragistics.Win.UltraWinGrid.UltraGridActio

既然我不能输入参数,我怎么能尊重以下签名

Private Sub SetFocusToRow(ByRef ultraGridRow As Infragistics.Win.UltraWinGrid.UltraGridRow)
    grdSoldeOuverture.ActiveCell = ultraGridRow.Cells(0)
    grdSoldeOuverture.PerformAction(Infragistics.Win.UltraWinGrid.UltraGridAction.EnterEditMode)
End Sub
当我这样称呼它的时候

Me.BeginInvoke(New MethodInvoker(AddressOf Me.SetFocusToTemplateAddRow))


我使用Microsoft Visual Basic 2005在VisualStudio2005的.NET 2.0上运行,因此lambda表达式不是一个选项。

您可以使用lambda捕获需求并将其传入:

Foo arg = GetTheFoo()

BeginInvoke(New MethodInvoker(Sub() SetFoo(arg)))

编辑:

首先,将方法更改为不传递
ByRef
-这是不必要的:

Private Sub SetFocusToRow(ByVal ultraGridRow As Infragistics.Win.UltraWinGrid.UltraGridRow)
    grdSoldeOuverture.ActiveCell = ultraGridRow.Cells(0)
    grdSoldeOuverture.PerformAction(Infragistics.Win.UltraWinGrid.UltraGridAction.EnterEditMode)
End Sub
接下来,定义一个委托:

' Define your delegate:
Delegate Sub SetFocusToRowDelegate(ByVal ultraGridRow As Infragistics.Win.UltraWinGrid.UltraGridRow)
然后您可以通过以下方式拨打:

BeginInvoke(new SetFocusToRowDelegate(AddressOf SetFocusToRow), arg)

由于lambda会导致问题,您可以尝试使用对象手动实现它们:

Class FooCurry

    Private bar as Foo

    Private Sub new (foo as Foo)
       bar = foo
    End Sub

    Public sub DoFoo()
       bar.SetFoo()
    EndSub
End Class

dim foocurry as new FooCurry(foo)
BeginInvoke(New MethodInvoker(AdressOf foocurry.DoFoo))

这就是lambda在引擎盖下的实现方式,所以这应该是可行的。您可以将对象概括为接受委托并在更多地方使用它。

如果我没记错的话,lambdas在Framework 2.0中不存在,对吗?忘了提到我的框架不知道我必须使用lambda…@PhaDaPhunk Lambdas是一个编译器功能,所以你可能不需要对它们的框架支持(公平地说,我现在不确定),只是一个现代的VB编译器。这对你来说可能吗?@PhaDaPhunk好的-刚刚编辑以显示使用控件的“正常”老式方式。BeginInvoke…@PhaDaPhunk你拼写对了吗?你的问题有很多拼写错误。。。你能出示你的准确密码吗?如果您正确定义了代理,上面的操作应该有效…我会注意到错误是否与拼写有关。。。我用完整的原始代码更新了我的问题。。如何更改它以使其工作?谢谢谢谢这是一个很好的方法。。但我想做的有点过分了。。。我想我可以找到另一种方法而不必担心。。。所以这是我唯一的选择?这比仅仅定义自定义委托类型和使用BeginInvoke重载来获取参数要困难得多…是的,但当他说他不能使用lamdas时,我首先想到的是,像vb在后台那样实现它们