[英]How to wrap code in a lambda expression using a BackgroundWorker in vb.net?
考慮以下C#代碼:
private void SomeMethod()
{
IsBusy = true;
var bg = new BackgroundWorker();
bg.DoWork += (sender, e) =>
{
//do some work
};
bg.RunWorkerCompleted += (sender, e) =>
{
IsBusy = false;
};
bg.RunWorkerAsync();
}
我知道VB.NET不允許直接引用這樣的DoWork
,你必須通過將Private WithEvents Worker As BackgroundWorker
並顯式處理DoWork
事件來設置worker,如下所示:
Private Sub Worker_DoWork(
ByVal sender As Object,
ByVal e As DoWorkEventArgs) _
Handles Worker.DoWork
...
End Sub
但是,我希望能夠從VB.net中的C#示例實現類似SomeMethod
的方法。 可能這意味着將Backgroundworker包裝在另一個類中(這是我想要進行依賴注入和單元測試的事情)。 我只是不確定如何以簡單,優雅的方式去做。
您可以使用AddHandler
關鍵字直接引用DoWork
,就像在C#中一樣:
AddHandler bg.DoWork, Sub(sender, e)
DoSomething()
End Sub
AddHandler bg.RunWorkerCompleted, Sub(sender, e)
IsBusy = False
End Sub
bg.RunWorkerAsync()
請注意,這僅適用於VB10,因為早期版本的VB不支持多語句lambda。
如果您使用的是VB.NET 10(Visual Studio 2010附帶),則以下情況應該可以正常工作:
Dim bg = New BackgroundWorker()
AddHandler bg.DoWork,
Sub()
DoSomething()
End Sub
AddHandler bg.RunWorkerCompleted,
Sub()
IsBusy = False
End Sub
bg.RunWorkerAsync()
這里需要VB.NET 10,因為早期版本的VB.NET不允許跨越多行的lambdas(匿名Sub
s)。
話雖這么說,您應該能夠定位早期版本的.NET Framework,因為上面的代碼與CLR的版本2兼容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.