保持执行直到Dispatcher.BeginInvoke终止

时间:2014-10-09 22:47:11

标签: c# wpf winforms

我有以下代码:

public override Geometry GetGeometry()
{
    PathGeometry geo = null;

    this.Dispatcher.BeginInvoke(new Action(() =>
    {
        geo = diamond.GetGeometry() as PathGeometry;

        TransformGroup group = new TransformGroup();
        group.Children.Add(new TranslateTransform(CrossModelProperties.Left, CrossModelProperties.Top));

        if (CrossModelProperties.IsTransformExists)
        {
            group.Children.Add(new RotateTransform() { Angle = CrossModelProperties.Transform.Angle, CenterX = this.GetCenter().X, CenterY = this.GetCenter().Y });
        }

        geo.Transform = group;

        geo.Freeze();

    }), System.Windows.Threading.DispatcherPriority.Send, null);

    return geo;
}

在保持应用程序消息泵运行的同时,如何暂停执行此函数,直到BeginInvoke终止为止?我不想退出这个函数的范围,所以lambda表达式解决方案会很棒。

2 个答案:

答案 0 :(得分:0)

Dispatcher.BeginInvoke显式异步。

要获取同步行为,请使用Dispatcher.Invoke。

答案 1 :(得分:0)

var dOpe = Dispatcher.BeginInvoke( /* your method here */);
dOpe.Completed += (s, e) => { /* callback code here */ };

暂停线程直到回调。您可以在回调中调用您的函数并继续使用该线程。