背景:
我有一个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);
谢谢!