【问题标题】:Showing application still processing in C# windows form apps在 C# windows 窗体应用程序中显示仍在处理的应用程序
【发布时间】:2010-08-09 14:14:34
【问题描述】:

我需要显示某种动画,而 Windows 窗体应用程序正在处理数据直到它给出输出。处理完成的动画将停止。 Dev express 中有很多很棒的工具可以用于基于 Web 的应用程序。但是我们在 windows 窗体应用程序中是否有类似的东西?

谢谢

这是一个调用存储过程的 Windows 窗体。 SQL 查询大约需要 10 分钟,我需要运行一些动画,告诉系统仍在处理中。由于我无法分配步骤,所以进度条无法工作。

【问题讨论】:

  • 你的意思是像我们很久以前那样把光标变成沙漏已经不够了?
  • 如果您将光标移到应用程序上方,但我只想在我们处理其他事情时显示它的处理过程。这是处理大型数据库中的数据,查询大约需要 10 分钟。

标签: c# windows forms


【解决方案1】:

你会想看看BackgroundWorker class,它将允许你在另一个线程上启动你的代码,并处理工作线程和 UI 线程之间的通信,以便你可以适当地更新 UI。

【讨论】:

  • 谢谢,该链接正是我遇到的问题。两个线程似乎是唯一的方法
【解决方案2】:

我建议将工作委托给 BackgroundWorker 并显示进度条。由于您无法分配步骤,您可以只使用该条来反映它应该花费的时间。

如果您想让进度条更准确,而不仅仅是根据您的开发机器上的测试任意决定它应该需要 10 分钟,您可以记录事务花费的时间并使用事务最近花费的时间决定您的进度条需要多长时间才能填满。

您还可以委托给 BackgroundWorker 并在前台显示带有计数器或其他内容的消息——“查询正在进行中。经过的时间:2 分钟。预计完成时间:10 分钟。”然后还有一个取消按钮。类似的东西。

只是不同的可能性。没有一个很好,但是您缺乏对流程的内部访问限制了您的选择。

哦,看来你已经得到了答案。呃,好吧! 编辑>

【讨论】:

  • BackgroundWorker 似乎是最好的选择。随着数据库的增长,设置修复时间不会起作用,查询时间也会增长。谢谢
  • 是的,但是跟踪每个人花费的时间并将其用作我上面建议的估计时间在这种情况下会有所帮助,不是吗?
  • 但每次增加我都必须更改代码,对吗?
  • 什么?不,您只需记录花费的时间并将其保存在某处,然后在事务开始时加载该值。为什么必须手动进行? if (File.Exists(SaveFilePath)) ExpectedTime = TimeSpan.Parse(File.ReadAllText(SaveFilePath)); worker.RunWorkerAsync(() => { startTime = DateTime.Now; DoSQLTransaction(); transactionTime = DateTime.Now - start; }); //在上面运行时,按设定的时间间隔更新进度条 //并等待操作完成 File.WriteAllText(SaveFilePath, transactionTime.ToString());
【解决方案3】:

我建议您查看 MSDN 中的 marque 样式进度条。它只是在您的操作过程中来回走动。您的 SQL 查询不会有 callacks 或任何东西,因此这将允许您仅表明您的应用程序正在“工作”某事。

http://msdn.microsoft.com/en-us/library/bb760816%28VS.85%29.aspx

通过创建进度条控件 使用 PBS_MARQUEE 样式,您可以 以显示的方式对其进行动画处理 活动,但不说明什么 任务完成的比例。 进度中突出显示的部分 条形沿长度重复移动 的酒吧。您可以启动和停止 动画,并控制其速度,通过 发送 PBM_SETMARQUEE 消息。 字幕进度条没有 范围或位置。

【讨论】:

    【解决方案4】:

    我在单独的线程上使用单独的表单中的 ProgressBar 来做这种事情。您可以使用计时器设置每 10 秒或其他时间的滴答声,然后在需要时将 ProgressBar 重置为零并让它继续滚动。

    【讨论】:

      猜你喜欢
      • 2018-07-12
      • 1970-01-01
      • 2021-08-27
      • 2011-09-23
      • 1970-01-01
      • 2020-10-08
      • 1970-01-01
      • 1970-01-01
      • 2012-03-23
      相关资源
      最近更新 更多