Winform C#控件无法正确刷新

时间:2018-03-27 13:02:44

标签: c# winforms

我遇到了一些每1秒刷新一次的控件的问题。 刷新的控件是3个进度条和3个标签。 但是在52分钟之后,这些标签变得奇怪,不再显示文字了。

勾选事件:

private void Timer_SystemInfo_Tick(object sender, EventArgs e)
    {
        Timer_SystemInfo.Stop();
        float CPU_raw = CPUcounter.NextValue();
        if (CPU_raw > 100)
            return;
        int CPU_value = int.Parse(CPU_raw.ToString("0"));
        double RAM_raw = RAMcounter.NextValue();
        int RAM_value = int.Parse(((TotalRAM - RAM_raw) / TotalRAM * 100).ToString("0"));
        AvailableStorage = DriveInformation.AvailableFreeSpace / 1000000;
        double AvailableStorageGB = double.Parse((AvailableStorage / 1000).ToString("0.##"));
        int HDD_value = int.Parse(((TotalStorage - AvailableStorage) / TotalStorage * 100).ToString("0"));

        DriveInfo[] Drives = DriveInfo.GetDrives();
        if (Drives.Count() > 1)
        {
            int cnt = 1;
            try
            {
                foreach (DriveInfo partition in Drives)
                {
                    if (cnt > 1)
                    {
                        double Psize = partition.TotalSize / 1000000;
                        double Asize = partition.AvailableFreeSpace / 1000000;
                        int EXT_value = int.Parse(((Psize - Asize) / Psize * 100).ToString("0"));

                        PB_EXT.Value = EXT_value;
                        LB_extstorage.Text = EXT_value + "% - " + Asize.ToString("0") + " MB free";

                        if (!lbl_ext.Visible)
                        {
                            lbl_ext.Show();
                            LB_extstorage.Show();
                            PB_EXT.Show();
                            PB_EXT.BringToFront();
                        }
                    }
                    cnt++;
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error when reading external drive" + ex.Message);
            }
        }
        else
        {
            if (lbl_ext.Visible)
            {
                lbl_ext.Hide();
                LB_extstorage.Hide();
                PB_EXT.Hide();
            }
        }
        PB_CPU.Value = CPU_value;
        LB_CPU.Refresh();
        LB_CPU.Text = CPU_value + "%";
        PB_RAM.Value = RAM_value;
        LB_RAM.Text = RAM_value + "%";
        PB_HDD.Value = HDD_value;
        LB_HDD.Text = PB_HDD.Value + "% - " + AvailableStorageGB + " GB free";
        Timer_SystemInfo.Start();
    }

这是2张照片。我想你可以注意到发生了什么。它发生在一段时间(分钟)之后。

https://i.stack.imgur.com/TNiAu.jpg 还有这个:   https://i.stack.imgur.com/80fnT.jpg

控件看起来像这样。我希望这不是问题吗? 此外,我还有一个1秒的计时器来刷新时间/日期。   https://i.stack.imgur.com/NVPqe.png

这是整个设置:   https://i.stack.imgur.com/tnbeM.png

更新1.0 我试图UI只更新CPU标签和进度条。它没有问题。接下来,我将尝试仅更新RAM,然后仅进行存储更新。

更新2.0 我删除了进度条的更新并在整个晚上运行。它似乎工作正常。更新进度条一定存在一些问题。它变薄了吗?高度为5px。接下来的测试将使进度条更高。

更新2.1 我发现进度条的高度为5px,半径也设置为5px。我删除了半径,不幸的是,PB仍然会导致问题。 接下来的测试是将PB的高度设置为20px,也没有半径。

更新3.0 我强烈怀疑PB代码不好。我用MetroFramework PB替换它们并进行测试。调试模式下93分钟,看起来很稳定。

1 个答案:

答案 0 :(得分:0)

这本身就是一个糟糕的进步吧。进度条在一段时间后崩溃了。我将进度条从Bunifu替换为Metro。