嗯,我想要做的是显示一个动画gif,同时它读取一个充满文件的目录,但UI冻结,这没关系,但我想保持gif运行直到操作完成。有什么想法吗?
我是在使用VS2010 C#
的Windows窗体上进行的答案 0 :(得分:5)
以下是一些示例代码,您可以如何加载文件aysnchronous。也许它会帮助你。我比使用DoEvents更喜欢这种方式。使用DoEvents我已经有一些不良副作用,因此我尽量不使用它。
BackgroundWorker bgWorker = new BackgroundWorker() { WorkerReportsProgress=true};
bgWorker.DoWork += (s, e) => {
// Load here your file/s
// Use bgWorker.ReportProgress(); to report the current progress
};
bgWorker.ProgressChanged+=(s,e)=>{
// Here you will be informed about progress and here it is save to change/show progress. You can access from here savely a ProgressBars or another control.
};
bgWorker.RunWorkerCompleted += (s, e) => {
// Here you will be informed if the job is done.
// Use this event to unlock your gui
};
bgWorker.RunWorkerAsync();
答案 1 :(得分:1)
您有两种选择。
启动一个单独的线程来处理文件操作。
定期在文件循环中调用Application.DoEvents()。这将导致您的应用处理待处理的消息(从而更新您的UI),但会对文件处理循环的速度产生负面影响。
从我的手机发帖,所以没有示例链接。
答案 2 :(得分:0)
运行枚举是一个单独的线程,并在主线程中更新GUI。
答案 3 :(得分:0)
这样的事情可以用于backgroundWorker吗?
private void buttonRename_Click(object sender, EventArgs e)
{
backgroundWorker1.RunWorkerAsync();
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
foreach (ListViewItem myitem in listView.Items)
{
try
{
//Rename
}
catch
{
}
}
}