c# - 如何延迟我的打印功能以便我可以看到每个对象的打印时间

标签 c# wpf

在我的程序中,我有一组对象,我想延迟打印每个对象。

现在这是我的 Draw() 函数:

    public void Draw()
    {
        myCanvas.Children.Clear();
        foreach (Square Sq in MyDrawings)
        {
            Application.Current.Dispatcher.BeginInvoke(new Action(() =>
            {
                sq.Draw();
            }));
        }
    }

我的 sq.draw() 函数,当前绘制一个矩形,并将其添加到 Canvas 中:

             rect = new Rectangle
             {
                 Stroke = Brushes.Black,
                 StrokeThickness = 0.5,
                 Fill = Brushes.Black,
                 Height = Width,
                 Width = Width
             };
             Canvas.SetTop(rect, x * Width);
             Canvas.SetLeft(rect, y * Width);
             Form.myCanvas.Children.Add(rect);

我试过添加一个 Thread.Sleep();在主 Draw() 函数中,但它似乎阻塞了 UI 线程,当它解除阻塞时,整个 Array 已被绘制。

我也尝试过使用 DispatcherTimer,但我不知道要添加什么延迟,因为我想打印每个对象,而不是基于时间。

固定代码:

    public void Draw()
    {
        myCanvas.Children.Clear();
        foreach (Square Sq in MyDrawings)
        {
            Task.Run(() =>
            {
                Application.Current.Dispatcher.BeginInvoke(new Action(() =>
                {
                    sq.Draw();
                }));
                Thread.Sleep(100);
            });
        }
    }

最佳答案

如果您只想遍历集合并一个接一个地启动异步/并行执行打印作业,您可以做类似的事情

    foreach (Square Sq in MyDrawings)
    {
        Task.Run(() =>
        {
            sq.Draw();
            Thread.Sleep(SOME_MILLISECONDS_TO_WAIT);
        }));
    }

这将在指定的 SOME_MILLISECONDS_TO_WAIT 毫秒数量上暂停迭代,并迭代集合中的另一个元素。 当然,如果您关心来自 Task 的反馈,或者想要尽可能多地控制 Task 的运行,您将需要在此代码中添加更多内容。

关于c# - 如何延迟我的打印功能以便我可以看到每个对象的打印时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43597529/

相关文章:

c# - 如何使用来自 asp.net Web API 的 webApi 将结果存储在数据库中?

c# - 类实现抽象类的通用类型约束

c# - 如何在没有 Application.Run 的情况下从 VBE 加载项运行宏?

c# - CSLA数据库功能

c# - 我们可以在运行应用程序时编辑我们的代码吗

c# - 如何制作 MaterialDesignInXamlToolkit 自定义颜色主题?

wpf - 实时将 .TXT 读入 ListBox

c# - 在 XAML 中查找打开的窗口

c# - 在 C# 中自定义绘制 MapPoint map ?

c# - 从矩阵变换计算角度