繁体   English   中英

C#中的异步方法调用

[英]Asynchronous method call in C#

我们有这种情况。 我们有一个画布,上面绘制了一些数字。 可能是1个或更多(例如1000个),我们需要使用情节提要将其翻译动画化到另一个位置(单击按钮):

internal void someStoryBoard(figure someFigure, double coordMoveToValue)
{
    string sbName = "StoryBoard_" + figure.ID;
    string regName = "figure_" + figure.ID;
    try 
    {
        cnvsGame.Resources.Remove(sbName);
        cnvsGame.UnregisterName(regName);
    } 
    catch{ }
        someCanvas.RegisterName(regName, someFigure.Geometry);
        var moveFigureYAnimation = new PointAnimation();
        moveFigureYAnimation.From = new Point(someFigure.Geometry.Center.X, someFigure.Geometry.Center.Y);
        moveFigureYAnimation.To = new Point(someFigure.eGeometry.Center.X, coordMoveToValue);
        moveFigureYAnimation.Duration = TimeSpan.FromSeconds(0.5);
        var sbFigureMove = new Storyboard();
        Storyboard.SetTargetName(sbFigureMove, regName);
        Storyboard.SetTargetProperty(sbFigureMove, new PropertyPath(Geometry.CenterProperty));
        sbFigureMove.Children.Add(moveFigureYAnimation);
        cnvsGame.Resources.Add(sbName, sbFigureMove);
        sbFigureMove.Begin();           
    }

数字存储在列表中。 我们使用for循环调用此StoryBoard:

for(int i = 0; i<listOfFigures.Count; i++)
    {
        someStoryBoard(listOfFigures[i], someCoord);
    }

但这就是问题所在:如果我们只有少量数字,那么代码会很快完成。 但是,如果数量很大,则在单击按钮之后以及图形开始移动之前会有一个延迟。 因此,这是一个问题:是否可以异步调用someStoryBoard方法? 下一个算法是否可能->当调用someStoryBoard时,它立即开始移动图形,而不是等待整个for循环完成。

您可以通过调用Dispatcher.InvokeAsync将操作添加到Dispatcher队列中。 您还可以根据需要指定调度程序优先级。

请注意,移动数以千计的项目并不能可靠地快速完成,因此您可能需要重新考虑绘图逻辑。 如果甚至开始的动画很慢, 动画也很可能不够快。

您可以尝试使用异步/等待修饰符

async internal Task someStoryBoard(figure someFigure, double coordMoveToValue)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM