我正在尝试将以下C#代码段转换为VB:
public bool ShowHandlerDialog(string message)
{
Message = message;
Visibility = Visibility.Visible;
_parent.IsEnabled = false;
_hideRequest = false;
while (!_hideRequest)
{
// HACK: Stop the thread if the application is about to close
if (this.Dispatcher.HasShutdownStarted ||
this.Dispatcher.HasShutdownFinished)
{
break;
}
// HACK: Simulate "DoEvents"
this.Dispatcher.Invoke(DispatcherPriority.Background, new ThreadStart(delegate { }));
Thread.Sleep(20);
}
return _result;
}
但翻译在这一行上出错:
this.Dispatcher.Invoke(DispatcherPriority.Background, new ThreadStart(delegate { }));
翻译是:
Me.Dispatcher.Invoke(DispatcherPriority.Background, New ThreadStart(Function() Do End Function))
在新的ThreadStart之后,似乎无法正确转换该位。有人可以解释一下“delegate {}
”在
new ThreadStart(delegate {}));
以及如何更正翻译错误?谢谢你的建议!
答案 0 :(得分:1)
该行只是激活一个新线程并等待它完成。 “委托{}”代码只是一个匿名/内联方法(我不认为VB.NET支持);就像你基本上会指出一个空方法一样。例如,在c#中,事件处理程序可以绑定到匿名(内联)委托方法,如下所示:
this.OnClick += (EventHandler)delegate(object sender, EventArgs ea) {
MessageBox.Show("Click!");
};
上面的评论说[// HACK:模拟“DoEvents”]。只需用VBE的DoEvents替换这两行,就应该进行设置。然后允许其他线程在继续之前完成其工作,从而提高响应能力。
希望这有帮助!