【问题标题】:Progress bar displaying execution of a method显示方法执行的进度条
【发布时间】:2011-01-25 13:30:52
【问题描述】:

我不知道如何在 Compact .Net Framework 中显示方法的执行。 例如,我有一个方法(例如 Upload()Print())需要一些时间(在某些情况下是一个很大的间隔)才能完成。我想要用户可以在进度条上看到耗时任务的进度(例如Upload())。

我尝试使用ThreadThreadPool.QueueUserWorkItembut 执行此操作,但我被卡住了。 问题是我不知道如何同步方法的线程和进度条。

请帮忙。

【问题讨论】:

    标签: c# multithreading compact-framework


    【解决方案1】:

    您可以将耗时的工作分叉到该线程中的新线程中,您可以确定您的进度并触发ProgressChanged(int actualProgress) 之类的偶数,然后在 UI 中处理该事件并根据事件的值设置进度条。届时您将不得不进行一些调度。

    【讨论】:

    • 请您详细说明一下好吗?我尝试了类似的事情,但是 CF 框架没有线程的 IsAlive() 方法。
    【解决方案2】:

    希望对您有所帮助:

    ProgressBar pg = new ProgressBar();
    pg.Maximum = 100;
    pg.Step = 1;
    
    this.Controls.Add(pg);
    
    new Thread(new ThreadStart(() =>
        {
            // Replace with your code:
            for (int i = 0; i < 100; i++)
            {
                if (pg.InvokeRequired)
                    pg.Invoke(new ThreadStart(() =>
                        {
                            pg.PerformStep();
                        }));
                else
                    pg.PerformStep();
            }
        })).Start();
    

    这部分很重要,否则会出现异常:

    if (pg.InvokeRequired)
        pg.Invoke(new ThreadStart(() =>
            {
                pg.PerformStep();
            }));
    else
        pg.PerformStep();
    

    【讨论】:

    • 就是这样。我正在努力在哪里插入进度条更新时正在运行的方法的线程。
    【解决方案3】:

    你所说的“同步方法的线程和进度条”是什么意思我只能猜测你在尝试更改进度条的值时遇到了异常? 如果这是问题所在,您将不得不使用线程安全的方式:http://msdn.microsoft.com/en-us/library/ms171728.aspx

    【讨论】:

    • 含义:方法运行时进度条必须在进行中。当方法退出时,进度条停止。它还可以模拟方法的执行。重要的是进度条必须在方法启动时开始,在方法执行结束时结束。我没有遇到任何异常。
    【解决方案4】:

    您是否尝试过查看BackgroundWorker?

    您可以运行线程并更新进度条。

    编辑

    没想到是给CF的,但是浏览时发现有一篇文章不知道你有没有遇到过:

    http://msdn.microsoft.com/en-us/library/aa446488.aspx

    【讨论】:

    • 没问题 :) 我正是使用该文档作为参考。但我不知道如何跟踪进度。
    • 在 CF 中并没有做太多,但经过一番搜索后,我发现这里创建了这个自定义类:danielmoth.com/Blog/backgroundworker-sample.aspx
    猜你喜欢
    • 2015-11-20
    • 2013-11-30
    • 1970-01-01
    • 2017-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多