相关疑难解决方法(0)

Windows 7 Aero Theme Progress Bar Bug?

我遇到了我认为是Windows 7上的进度条错误.为了演示该错误,我创建了一个带有按钮和进度条的WinForm应用程序.在按钮的'on-click'句柄中,我有以下代码.

private void buttonGo_Click(object sender, EventArgs e)
{
  this.progressBar.Minimum = 0;
  this.progressBar.Maximum = 100;

  this.buttonGo.Text = "Busy";
  this.buttonGo.Update();

  for (int i = 0; i <= 100; ++i)
  {
    this.progressBar.Value = i;
    this.Update();

    System.Threading.Thread.Sleep(10);
  }

  this.buttonGo.Text = "Ready";
}
Run Code Online (Sandbox Code Playgroud)

预期的行为是进度条前进到100%,然后按钮文本更改为"就绪".但是,在Windows 7上开发此代码时,我注意到进度条将上升到大约75%,然后按钮文本将变为"就绪".假设代码是同步的,这不应该发生!

在进一步测试中,我发现在Windows Server 2003上运行的完全相同的代码产生了预期的结果.此外,在Windows 7上选择非空气动力学主题会产生预期的结果.

在我看来,这似乎是一个错误.当长操作涉及复杂的代码时,通常很难使进度条准确,但在我的特定情况下它非常直接,所以当我发现进度控制没有准确地表示进度时我感到很失望.

有没有人注意到这种行为?有人找到了解决方法吗?

aero windows-7 progress-bar

10
推荐指数
3
解决办法
4942
查看次数

如何使用仪表式进度条?

在Vista/7中,Windows资源管理器外壳窗口使用一种特殊的静态进度条来显示硬盘空间.

使用默认样式时,此栏为蓝色且未设置动画.当它接近满(低磁盘空间)时,它也会变成红色.

使用消息传递,我可以告诉Windows Forms ProgressBar控件将其状态更新为Paused和Error(分别为黄色和红色),这样可以正常工作,但这些仍然是特定于进度的.

Windows用户体验指南中,它特别指出了进度条的这个"米"变体:

此模式不是进度条,但它是使用进度条控件实现的.仪表具有独特的外观,可以将它们与真正的进度条区分开来.

他们说它"是使用进度条控件实现的",所以......怎么样?我可以向控件发送什么消息让它以这种方式运行?

我已经看到你可以发送用于设置条形颜色的消息,但文档说在启用视觉样式时会忽略这些调用.原始ProgressBar控件的Windows API文档中没有任何其他内容似乎提示了一种方法.我只是坚持制作一个自定义绘制栏?我真的很想尽可能利用操作系统,以便应用程序在不同的操作系统版本中显得一致.我意识到Vista之前的版本可能不会支持这一点.

我正在寻找一个Windows窗体的解决方案,但我不知道,如果它甚至暴露在所有通过的Win32 API.

explorer winforms progress-bar

10
推荐指数
1
解决办法
3253
查看次数

如何让进度条更新得足够快?

我正在使用进度条向用户显示该过程的进度.它有17个步骤,根据天气情况可能需要大约5秒到2到3分钟(好吧,数据库)

我在XP中没有遇到任何问题,进度条没问题,但是在vista中进行测试时我发现情况已经不再如此.

例如:如果它接近5秒,它可能会在消失之前使其成为1/3,因为它已经完成.虽然它的进展是17的17,但它没有显示出来.我相信这是因为动画Vista强加于进度条并且动画无法快速完成.

有谁知道我怎么纠正这个?

这是代码:

这是更新进度条的部分,等待是具有进度条的表单.

        int progress = 1;
        //1 Cash Receipt Items
        waiting.setProgress(progress, 18, progress, "Cash Receipt Items");
        tblCashReceiptsApplyToTableAdapter1.Fill(rentalEaseDataSet1.tblCashReceiptsApplyTo);
        progress++;
        //2 Cash Receipts
        waiting.setProgress(progress, "Cash Receipts");
        tblCashReceiptsTableAdapter1.Fill(rentalEaseDataSet1.tblCashReceipts);
        progress++;
        //3 Checkbook Codes
        waiting.setProgress(progress, "Checkbook Codes");
        tblCheckbookCodeTableAdapter1.Fill(rentalEaseDataSet1.tblCheckbookCode);
        progress++;
        //4 Checkbook Entries
        waiting.setProgress(progress, "Checkbook Entries");
        tblCheckbookEntryTableAdapter1.Fill(rentalEaseDataSet1.tblCheckbookEntry);
        progress++;
        //5 Checkbooks
        waiting.setProgress(progress, "Checkbooks");
        tblCheckbookTableAdapter1.Fill(rentalEaseDataSet1.tblCheckbook);
        progress++;
        //6 Companies
        waiting.setProgress(progress, "Companies");
        tblCompanyTableAdapter1.Fill(rentalEaseDataSet1.tblCompany);
        progress++;
        //7 Expenses
        waiting.setProgress(progress, "Expenses");
        tblExpenseTableAdapter1.Fill(rentalEaseDataSet1.tblExpense);
        progress++;
        //8 Incomes
        waiting.setProgress(progress, "Incomes");
        tblIncomeTableAdapter1.Fill(rentalEaseDataSet1.tblIncome);
        progress++;
        //9 Properties
        waiting.setProgress(progress, "Properties");
        tblPropertyTableAdapter1.Fill(rentalEaseDataSet1.tblProperty);
        progress++;
        //10 Rental …
Run Code Online (Sandbox Code Playgroud)

c# windows-vista .net-3.5 progress-bar

8
推荐指数
3
解决办法
2万
查看次数

WPF/Windows 7:禁用默认进度栏辉光动画

快速WPF问题 - 在WPF上的Win 7(我假设Vista),默认进度条做了一个漂亮的小发光"飞快移动"-y动画.

我在一个屏幕上显示了大约48个内容的进度,并且让所有这些东西都在你身上who - - - 你能禁用这些动画而不影响应用程序中的其他默认动画吗?

wpf animation aero .net-3.5 progress-bar

8
推荐指数
3
解决办法
1万
查看次数

进度条值与在Windows 7中呈现的内容不同步

似乎在Windows 7中,在设置进度条的值时会发生一些动画.设置值似乎不等待动画完成.有没有办法通知进度条何时完成动画?

我有一个示例程序.请参阅评论.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.Threading;

namespace Testing
{
   static class Program
   {
      [STAThread]
      static void Main()
      {
         Application.EnableVisualStyles();
         Application.SetCompatibleTextRenderingDefault(false);
         var form = new Form1();
         form.Run();
      }
   }

   public partial class Form1 : Form
   {
      public Form1()
      {
         InitializeComponent();
      }

      public void Run()
      {
         Thread thread = new Thread
         (
            delegate()
            {
               ProgressBarMax = 10;
               ProgressValue = 0;

               for (int i = 0; i < 10; i++)
               {
                  Thread.Sleep(1000);
                  ProgressValue++;
               }
            }
         ); …
Run Code Online (Sandbox Code Playgroud)

c# winforms progress-bar

1
推荐指数
1
解决办法
5466
查看次数