3 回答
TA贡献1777条经验 获得超10个赞
您可以这样启动:
int value = 123;
bgw1.RunWorkerAsync(argument: value); // the int will be boxed
接着
private void worker_DoWork(object sender, DoWorkEventArgs e)
{
int value = (int) e.Argument; // the 'argument' parameter resurfaces here
...
// and to transport a result back to the main thread
double result = 0.1 * value;
e.Result = result;
}
// the Completed handler should follow this pattern
// for Error and (optionally) Cancellation handling
private void worker_Completed(object sender, RunWorkerCompletedEventArgs e)
{
// check error, check cancel, then use result
if (e.Error != null)
{
// handle the error
}
else if (e.Cancelled)
{
// handle cancellation
}
else
{
double result = (double) e.Result;
// use it on the UI thread
}
// general cleanup code, runs when there was an error or not.
}
TA贡献1846条经验 获得超7个赞
尽管这是一个已经回答的问题,但我还是会提出另一个选择,即IMO更容易阅读:
BackgroundWorker worker = new BackgroundWorker();
worker.DoWork += (obj, e) => WorkerDoWork(value, text);
worker.RunWorkerAsync();
并在处理程序方法上:
private void WorkerDoWork(int value, string text) {
...
}
TA贡献1828条经验 获得超3个赞
您可以像这样传递多个参数。
List<object> arguments = new List<object>();
arguments.Add(argument 1);
arguments.Add(argument 1);
arguments.Add(argument n);
backgroundWorker2.RunWorkerAsync(arguments);
private void worker_DoWork(object sender, DoWorkEventArgs e) {
List<object> genericlist = e.Argument as List<object>;
extract your multiple arguments from this list and cast them and use them.
}
- 3 回答
- 0 关注
- 274 浏览
添加回答
举报