gpt4 book ai didi

c# - 使用C#在运行时创建事件处理程序

转载 作者:太空宇宙 更新时间:2023-11-03 18:00:32 28 4
gpt4 key购买 nike

我正在创建一个BackgroundWorker数组,该数组共享一个事件处理程序,如下所示:

BackgroundWorker[] workers = new BackgroundWorker[files.length];

for(int i = o; i<files.length; i++)
{
workers[i] = new BackgroundWorker();
workers[i].DoWork += new DoWorkEventHandler(worker_DoWork);
workers[i].RunWorkerCompleted += newRunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
workers[i].RunWorkerAsync(files[i]);
}


所有工作人员共享同一个事件处理程序,该事件处理程序仅使用不同的参数和结果来执行相同的操作,如下所示:

private void worker_DoWork(object sender, DoWorkEventArgs e)
{
e.Result = ComputeSomething(e.Argument.ToString());
}

private void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
resultArray.Add(e.Result);
}

private int ComputeSomething(string file)
{
...
return number;
}


显然,在代码中,我试图列出异步运行的BackgroundWorker,但是当我检查结果时,其中一些是不正确的。我猜想“ e.result”的值已被其他工作程序代替,因为如果是这样,则它们共享同一个事件处理程序,那么我想为每个BackgroundWorker创建单独的事件处理程序,以便e.result的值不会被替换。我该怎么做?

最佳答案

尝试同步对resultArray的访问:


private void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
lock(resultArray)
resultArray.Add(e.Result);
}

关于c# - 使用C#在运行时创建事件处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1820372/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com