耗时的工作和Progressbar

时间:2017-02-04 06:23:27

标签: c# wpf .net-4.6

我有一个包含项目的列表框,用户可以对项目执行某些操作,例如New / Edit / Delete。但是,这可能需要一些时间,而且我希望在执行基础操作时显示不确定的进度条。

我应该如何处理.NET 4.6& C#6.0? 根据{{​​3}},我应该使用基于任务的异步模式(TAP)。在该主题中有许多可能的解决方案。

这仍然是首选方式吗?

2 个答案:

答案 0 :(得分:1)

首先要理解的是,您应该在后台线程上执行“新建”/“编辑”/“删除”操作,以使您的UI保持响应,并使ProgressBar能够在所需的时间内更新这些操作要完成。

将某些工作卸载到后台线程的首选和最简单方法是使用任务并行库(TPL)并启动新任务。请记住,WPF控件具有线程关联性,因此您只能在最初创建它们的线程上访问它们,这是调度程序线程。

因此,您可以通过将Visibility的{​​{1}}属性设置为ProgressBar来实现此功能,启动执行实际New / Edit / Delete操作的任务,然后设置{{任务完成后,1}}属性再次返回Visible

C#:

Visibility

XAML:

Collapsed

答案 1 :(得分:0)

在C#中,您可以使用工具箱中的progressBar工具来显示不确定的时间。

要使用progressBar,只需将其拖放到表单上即可。

现在出现主要问题,你想展示一个不确定的时间。 要显示progressBar中的进度,请使用计时器和以下代码:

int value = 0;
private void timer1_Tick(object sender, EventArgs e)
    {
        if (value < 100)//value at 100 can be any large integer since indeterminant time
        {
            value++;
            progressBar1.Value = value;
        }

    }

设置timer1.Interval = 100;

变量值是您为progressBar设置的最大值。

由于您不知道时间,请将progressBar的最大值设置为10000或任何其他大值。 现在,当您输入功能时启用计时器(例如New / Edit / Delete)并在退出功能时禁用计时器