【发布时间】:2013-04-05 16:12:35
【问题描述】:
我需要调用一个 C dll 作为后台进程。 dll 的执行很耗时,因此我想在主 GUI 上显示一个进度条。为了使用 ReportProgress,我需要能够通过引用传递两个参数,并在参数值发生变化时更新进度条。但是,RunWorkerAsync 似乎只接受值(而不是引用)。
我该怎么做?
谢谢。
这里是简化的代码:
public void button1_Click(object sender, EventArgs e)
{
//Variable declarations and initializations
List<object> arguments = new List<object>();
arguments.Add(curgen);
arguments.Add(dataindex);
backgroundWorker1.RunWorkerAsync(arguments);
backgroundWorker1.ReportProgress(curgen * 100 / ngen, "GEN");
backgroundWorker1.ReportProgress(dataindex * 100 / (DIMENSION * FITNESSCASES), "DATA");
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
List<object> genericlist = e.Argument as List<object>;
// Getting variables from object
calldll.gpinnovization(ref curgen, ref dataindex);
}
我想通过引用传递“curgen”和“dataindex”。
【问题讨论】:
-
你能发布你的代码吗?
-
这当然行不通,调用RunWorkerAsync()的代码早就没有了。简单的解决方法是更新 RunWorkerCompleted 事件处理程序中的变量。
-
@HansPassant 据我了解, RunWorkerAsync() 是一个不同的线程。如果在 gpinnovization() 中更新了 'curgen' 和 'dataindex',那么 ReportProgress 应该能够更新进度条。请详细说明。
标签: c# winforms visual-studio-2010