c#WinForm Marquee进度条不滚动

时间:2014-07-22 22:13:07

标签: c# .net winforms progress-bar

背景:

我有一个VB6应用程序,它当前在数据库中进行一些处理,然后调用COM公开的c#类。然后,c#类对后台工作程序执行其他一些长处理。在此期间,我弹出一个状态窗口,其中包含状态标签和进度条。我希望进度条以字幕样式显示,但它没有动画。它是可见的并且功能正常但仅作为块样式。我可以设置值,它将显示块样式但是当我将样式设置为选框时,它只是没有做任何事情。是VB6应用程序杀了它吗?如何正确显示动画?

我做了什么:

  • 我确保设置了Application.EnableVisualStyles(); (我试过了 将它设置在不同的地方!)

  • 我已经以编程方式设置了品牌风格甚至验证了 调试时设置了样式。

  • 我试过调用ProgressBar.Show();即使它已经 在表格上可见。

  • 我尝试过同时使用静态和非静态(显示如下)的助手类。

这是我使用的小助手类。

internal class EStatusHelper
{
    private EStatus status = null;

    public void ShowStatusForm<T>(Action<T> process, T arguments)
    {
        var bg = new BackgroundWorker();

        bg.WorkerReportsProgress = true;

        using (status = new EStatus(bg.RunWorkerAsync))
        {
            bg.DoWork += (o, args) =>
            {
                process(arguments);
            };

            bg.RunWorkerCompleted += (o, args) =>
            {
                status.DialogResult = DialogResult.Cancel;
            };

            status.ShowDialog();
        }
    }

    public void UpdateStatusMessage(
        string message)
    {
        if (status != null)
        {
            if (status.StatusMessage.InvokeRequired)
            {
                try
                {
                    status.StatusMessage.Invoke(
                        new Action<string>(UpdateStatusMessage),
                        message);
                }
                catch { }
            }
            else
            {
                status.StatusMessage.Text = message;
            }
        }
    }
}

这里是表格EStatus,只是为了展示BackgroundWorker是如何开始的。

public partial class EStatus : Form
{
    public Action ShowAction = null;

    public EStatus()
    {
        Application.EnableVisualStyles();
        InitializeComponent();
    }

    public EStatus(Action a) : this()
    {
        ShowAction = a;
    }

    private void EStatus_Shown(object sender, EventArgs e)
    {
        if (ShowAction != null)
            this.BeginInvoke(ShowAction);
    }
}

这是使用辅助函数的基本调用。

// helper variable that can be passed around.
// Also tried Static methods instead of passing around a local variable.
var helper = new EStatusHelper();
helper.ShowStatusForm(MethodToInvoke, paramsToPass);

谢谢!

0 个答案:

没有答案