【发布时间】:2012-12-16 03:50:09
【问题描述】:
我遇到了Marquee ProgressBar 的麻烦。我需要执行一个方法(refreshList())来获得一个List<string>。然后我将这个List 分配给ComboBox,所以ComboBox 用新的Items 刷新。 refreshList() 需要 3 或 4 秒,我想运行 Marquee ProgressBar。但我做不到。 ProgressBar 可以,但 ComboBox 不会加载新的 Items。
我的refreshList() 方法:
private void refreshList(List<string> list)
{
albumList.DataSource = null;
albumList.DataSource = list;
}
我有以下代码,它工作正常:
private void changeDirectoryToolStripMenuItem_Click(object sender, EventArgs e)
{
fbd.RootFolder = Environment.SpecialFolder.MyComputer;
folderPath = "";
if (fbd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
folderPath = fbd.SelectedPath;
refreshList(N.getList(folderPath));
}
}
但我加了一个ProgressBar 并写了这段代码:
private void changeDirectoryToolStripMenuItem_Click(object sender, EventArgs e)
{
fbd.RootFolder = Environment.SpecialFolder.MyComputer;
folderPath = "";
if (fbd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
folderPath = fbd.SelectedPath;
bgWorker.WorkerReportsProgress = true;
bgWorker.RunWorkerAsync();
}
}
我把refreshList()放在doWork()方法中:
private void bgWorker_DoWork(object sender, DoWorkEventArgs e)
{
refreshList(N.getList(folderPath));
}
但不幸的是,这不起作用。有人可以帮我解决这个问题吗?提前致谢。
【问题讨论】:
-
我可以总结一个 TL;DR 版本的问题吗?设置数据源
albumList.DataSource = list;需要3-4秒,如何在分配时显示选框进度条?对吗? -
您确定 BackgroundWorker 类已连接到 DoWork 事件(即您的代码中有
bgWorker.DoWork += bgWorker_DoWork;吗?)。我也看不到你在哪里停止和启动ProgressBar -
在我看来这段代码无法编译?
bgWorker_DoWork中的folderPath是什么。 -
@Neolisk - 不完全是,部分。
N.getList(folderPath)需要 3-4 秒。那么如何在这个方法运行时显示一个选框进度条。 -
@HamletHakobyan - folderPath 可能是类中的一个字段。我不认为所有的代码都在这里......
标签: winforms c#-4.0 combobox backgroundworker