Мне нужно вызвать C dll в качестве фонового процесса. Выполнение dll занимает время, поэтому я хочу показать индикатор выполнения основного графического интерфейса. Чтобы использовать ReportProgress, мне нужно иметь возможность передавать два аргумента по ссылке и обновлять индикатор выполнения при изменении значений аргументов. Однако RunWorkerAsync, кажется, принимает значения (а не ссылки).Пропустить аргументы по ссылке BackgroundWorker
Как я могу это сделать?
Спасибо.
Вот упрощенный код:
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 по ссылке.
Можете ли вы разместить свой код? – Romoku
Это, конечно, не работает, код, который называется RunWorkerAsync(), давно ушел. Простым обходным решением является обновление переменных в обработчике событий RunWorkerCompleted. –
@HansPassant Как я понимаю, RunWorkerAsync() - это другой поток. Если «curgen» и «dataindex» обновляются внутри gpinnovization(), тогда ReportProgress должен обновить индикатор выполнения. Пожалуйста, дополните. – Prometheus