C#转VB.NET转换错误,请求建议

时间:2011-10-09 07:08:54

标签: c# vb.net c#-to-vb.net

我正在尝试将以下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 {}));

以及如何更正翻译错误?谢谢你的建议!

1 个答案:

答案 0 :(得分:1)

该行只是激活一个新线程并等待它完成。 “委托{}”代码只是一个匿名/内联方法(我不认为VB.NET支持);就像你基本上会指出一个空方法一样。例如,在c#中,事件处理程序可以绑定到匿名(内联)委托方法,如下所示:

this.OnClick += (EventHandler)delegate(object sender, EventArgs ea) {
    MessageBox.Show("Click!");
};

上面的评论说[// HACK:模拟“DoEvents”]。只需用VBE的DoEvents替换这两行,就应该进行设置。然后允许其他线程在继续之前完成其工作,从而提高响应能力。

希望这有帮助!