我想为我的应用设置一个进度条。
我正在使用后台从我的服务器下载一些文件。
如果我为此设置进度条会很好。
我知道要使用
ProgressBar.Value = 5;
等等。
但我想使用进度条。'
我将此代码用于进度条
private void bgDownload_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
this.downloadProgressBar.Value = e.ProgressPercentage;
}
但它不起作用。
任何人都可以说我该怎么做。
提前致谢
答案 0 :(得分:1)
如果您在后台进行处理,则UI将不会更新,直到结束。
所以你需要做的是创建一个单独的线程,处理将在其中发生,并在该线程内更新进度条。在主线程中没有做任何事情。
要从另一个线程中更新进度条,您将需要一个委托(或者您将收到运行时错误)。
希望这可以帮助你开始。
答案 1 :(得分:0)
您可以尝试使用 BackgroundWorker 下载某些文件。
因此,backgroud下载不会影响您的Process Bar。
private void btnDownLoad_Click(System.Object sender,
System.EventArgs e)
{
// Start the asynchronous operation.
backgroundWorkerDownLoadFile.RunWorkerAsync();
}
private void backgroundWorkerDownLoadFile_DoWork(object sender,
DoWorkEventArgs e)
{
// Get the File in Server.
}
答案 2 :(得分:0)
我假设您正在使用后台工作程序组件。因此,您必须从ReportProgress
方法中调用DoWork
backgroundworker方法,该方法应更新进度条。请在下面找到MSDN上的ReportProgress方法的一些参考:
答案 3 :(得分:0)
除了JKhuang所写的内容,要更改进度条中的值,您还需要添加 委托和回调函数
delegate void SetProgCallback(int newVal);
private void SetProgressbarValue(int newVal)
{
if (progbar.InvokeRequired)
{
SetProgCallback d = SetProgressbarValue;
Invoke(d, new object[] { newVal });
}
else
{
//insert your actual code here
}
}
答案 4 :(得分:0)
以下是如何执行此操作的示例。
public int ProgressBarPercentage { get; set; }
public string StatusMessage { get; set; }
public void StartDownload()
{
BackgroundWorker bw = new BackgroundWorker();
bw.WorkerReportsProgress = true;
bw.ProgressChanged += new ProgressChangedEventHandler(bw_ProgressChanged);
bw.DoWork += new DoWorkEventHandler(bw_DoWork);
bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);
bw.RunWorkerAsync();
}
void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
// Run clean up code here once complete (ie make sure progress bar is at 100 percent....
}
void bw_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker bw = sender as BackgroundWorker;
// Download files here
List<string> filestoget = new List<string>();
filestoget.Add("File1");
filestoget.Add("File2");
filestoget.Add("File3");
filestoget.Add("File4");
filestoget.Add("File5");
foreach (string file in filestoget)
{
// Get File
// Report output
int progress = 0; // add soemthing here to calculate your progress
bw.ReportProgress(progress, string.Format("File {0} downloaded", file));
}
}
void bw_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
ProgressBarPercentage = e.ProgressPercentage;
StatusMessage = e.UserState.ToString();
}