我编写了一个函数,它收集了大量文件,将它们拉上来,然后允许用户通过asp.net网站下载此zip文件。
然而,这些zip文件会非常大(比如1GB大),所以它不会立即发生,我想做的是能够在单独的线程上运行(可能? )当用户继续浏览网站时,一旦创建了zip,就可以通过某种方式通知他们,然后他们就可以下载这个zip了。
我希望能有一些关于如何在c#和UI方面做到最好的指示。
提前致谢。
答案 0 :(得分:2)
答案 1 :(得分:1)
您可以使用BackgroundWorker
组件。它具有提升进度事件的能力,您可以使用该事件向主线程(如UI)提供反馈。
public void static Main()
{
var bw = new BackgroundWorkder();
bw.DoWork += _worker_DoWork;
bw.RunWorkerCompleted += _worker_RunWorkerCompleted;
bw.ProgressChanged += _worker_ProgressChanged;
bw.WorkerReportsProgress = true;
bw.WorkerSupportsCancellation = false;
//START PROCESSING
bw.RunWorkerAsync(/*PASS FILE DATA*/);
}
private void _worker_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker bw = sender as BackgroundWorker;
var data = e.Argument as /*DATA OBJECT YOU PASSED*/;
//PSEUDO CODE
foreach(var file in FILES)
{
zipFile;
//HERE YOU CAN REPORT PROGRESS
bw.ReportProgress(/*int percentProgress, object userState*/)
}
}
private void _worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
// Just update progress bar with % complete or something
}
private void _worker_RunWorkerCompleted(object sender,
RunWorkerCompletedEventArgs e)
{
if (e.Error != null)
{
//...
}
else
{
//......
}
}
答案 2 :(得分:0)
使用backgroundworker:http://msdn.microsoft.com/en-us/library/cc221403(VS.95).aspx
答案 3 :(得分:0)
BackgroundWorker对象可能就是您要找的对象。 这是一个很好的教程:http://dotnetperls.com/backgroundworker