我需要将 C# 代码转换为 VB.NET 代码(基于 .NET 3.5 和 VS 2008),但我在将 C# 委托转换为其 VB.NET 等效项时遇到问题。
我要转换的 C# 代码可以正常工作,在这里:
protected override void OnOwnerInitialized()
{
if (!MobileApplication.Current.Dispatcher.CheckAccess())
{
// MobileApplication.Current is some 3rd party API
// MobileApplication.Current.Dispatcher is type System.Windows.Threading.Dispatcher
MobileApplication.Current.Dispatcher.BeginInvoke
(
(System.Threading.ThreadStart)delegate()
{
OnOwnerInitialized();
}
);
return;
}
DoSomething();
}
我翻译成以下 VB.NET 代码,但它不起作用:
Protected Overrides Sub OnOwnerInitialized()
If Not MobileApplication.Current.Dispatcher.CheckAccess() Then
MobileApplication.Current.Dispatcher.BeginInvoke(Function() New System.Threading.ThreadStart(AddressOf OnOwnerInitialized))
Return
End If
' I also tried the following but I get thread related errors elsewhere in code
'If ((Not MobileApplication.Current.Dispatcher.CheckAccess()) And (Not threadStarted)) Then
' Dim newThread As New Thread(AddressOf OnOwnerInitialized)
' newThread.Start()
' threadStarted = True ' this is a shared / static variable
' Return
'End If
DoSomething()
End Sub
使用 C# 代码, OnOwnerInitialized() 被调用两次。在第一次调用时,该函数以“return;”存在 陈述; 第二次调用 'DoSomething()。这是正确的行为。但是,在 VB.NET 代码中,它只运行一次,代码在“Return”语句上返回,就是这样(我相信我翻译的 VB.NET 代码没有正确调用线程。下面的代码是 C#代码)。
谢谢。