相关疑难解决方法(0)

如何使用WinForms进度条?

我想显示在外部库中执行的计算进度.

例如,如果我有一些计算方法,并且我想在我的Form类中使用它为100000个值,我可以写:

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

    private void Caluculate(int i)
    {
        double pow = Math.Pow(i, i);
    }

    private void button1_Click(object sender, EventArgs e)
    {
        progressBar1.Maximum = 100000;
        progressBar1.Step = 1;

        for(int j = 0; j < 100000; j++)
        {
            Caluculate(j);
            progressBar1.PerformStep();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我应该在每次计算后执行步骤.但是,如果我在外部方法中执行所有100000计算,该怎么办?如果我不想让这个方法依赖于进度条,我什么时候应该"执行步骤"?例如,我可以写

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

    private void CaluculateAll(System.Windows.Forms.ProgressBar progressBar)
    {
        progressBar.Maximum = 100000;
        progressBar.Step = 1;

        for(int j = 0; …
Run Code Online (Sandbox Code Playgroud)

c# winforms progress-bar

92
推荐指数
2
解决办法
31万
查看次数

如何使用DoEvents()而不是"邪恶"?

简单的搜索DoEvents会带来很多结果,这些结果基本上会导致:

DoEvents是邪恶的.不要使用它.请改用线程.

一般引用的原因是:

  • 重新入侵问题
  • 表现不佳
  • 可用性问题(例如,在禁用的窗口上拖放)

但是一些值得注意的Win32功能,例如TrackPopupMenuDoDragDrop 执行自己的消息处理以保持UI响应,就像这样DoEvents.
然而,这些问题似乎都没有遇到过这些问题(性能,再入等等).

他们是如何做到的呢?他们如何避免引用的问题DoEvents?(或者他们?)

windows winapi doevents visual-c++ winforms

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

标签 统计

winforms ×2

c# ×1

doevents ×1

progress-bar ×1

visual-c++ ×1

winapi ×1

windows ×1