问题
In C# you use BeginInvoke
like this:
obj.BeginInvoke((Action)(() =>
{
//do something
}));
I tried to translate it to VB.NET, and ended up with this code, that seems to work:
obj.BeginInvoke(
Sub()
'do something'
End Sub
)
The snippets look very different to me, especially because the (Action) (() =>
part is missing completely. Is this the correct way to use BeginInvoke
in VB.NET?
this is not a duplicate of How to use BeginInvoke C# because the question and every answer uses C# (if any programming language is used). C#-code doesn't help much when you are unsure about if you used the correct VB.NET syntax.
回答1:
(Action)
just casts the lambda to an Action
, which isn't needed in VB.NET. The Sub()
lambda is all you need.
You have got the correct conversion.
Although note that BeginInvoke()
must be followed by EndInvoke()
, otherwise you will get thread leaks.
回答2:
Yes, the (Action) (() =>
doesn't return anything so Sub
in VB.Net is equivalent. It'd be a Func in C# if it did return something.
来源:https://stackoverflow.com/questions/37278917/how-to-use-begininvoke-in-vb-net