我有以下代码:
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表达式解决方案会很棒。
答案 0 :(得分:0)
Dispatcher.BeginInvoke显式异步。
要获取同步行为,请使用Dispatcher.Invoke。
答案 1 :(得分:0)
var dOpe = Dispatcher.BeginInvoke( /* your method here */);
dOpe.Completed += (s, e) => { /* callback code here */ };
暂停线程直到回调。您可以在回调中调用您的函数并继续使用该线程。