显示方法执行的进度条

时间:2011-01-25 13:30:52

标签: c# multithreading compact-framework

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

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

请帮忙。

4 个答案:

答案 0 :(得分:2)

您可以将耗时的工作分配到该线程中的新线程,您可以确定您的进度并触发甚至像ProgressChanged(int actualProgress),然后在UI中处理该事件并根据来自的值设置进度条事件。那时你将不得不进行一些调度。

答案 1 :(得分:1)

我希望这有帮助:

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();

答案 2 :(得分:0)

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

答案 3 :(得分:0)

您是否尝试过查看BackgroundWorker?

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

修改

没有意识到它适用于CF,但是我在浏览时发现了一篇文章,我不知道你之前是否遇到过这个问题:

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