我不知道这里发生了什么,这有点不好看。
我正在将一个VBA宏改编成一个VB.net项目,我正在体验我所描述的一些我用于在VB.net中传递数据的方法的极端异常行为。这是设置......
出于索引的原因,我有一个由所有未结订单组成的集合:
Public allOpenOrders As New Collection
在这个集合中,我存储了其他按帐号编号的集合,每个集合都包含有关三个元素长的数组中每个未结订单的信息。这是我填充它的方式:
openOrderData(0) = some information
openOrderData(1) = some information
openOrderData(2) = some information
SyncLock allOpenOrders
If allOpenOrders.Contains(accountNumber) Then
'Already in the collection...
accountOpenOrders = allOpenOrders(accountNumber)
accountOpenOrders.Add(openOrderData)
Else
'Not already in collection
accountOpenOrders = New Collection
accountOpenOrders.Add(openOrderData)
allOpenOrders.Add(accountOpenOrders, AccountNumber)
End If
End SyncLock
这就是事情,如果我在结束synclock之后停止并检查集合,我可以清楚地看到包含所有数据的数组在那里,就像白天一样。但是,当我继续我的代码(这是在前面的代码执行后在另一个线程中发生)来检索它并将其写入工作簿...
If allOpenOrders.Contains(accountNumber) Then
accountOpenOrders = allOpenOrders(accountNumber)
For each openOrderArray In accountOpenOrders
OutputSheet.Cells(1, 1).value = accountNumber
For counter = 0 to 2
OutputSheet.Cells(1, counter + 2).value = openOrderArray(counter)
Next counter
Next openOrderArray
End If
我在B列中得到了数组的第一个元素,但C和D是空白的。更令人费解的是,如果我在allOpenOrders.Contains行之后立即停止,我可以查看集合,并且数组的最后两个元素现在是空白的。最令人费解的是,它们不仅仅是空白,它们是空白,一些空白长度与我在数组元素中记录的原始字段相等?!
任何想法都表示赞赏。我可以告诉你我正在使用相同类型的方法来加载此工作簿中的其他数据而没有任何问题。这些也是唯一触及allOpenOrders集合的实例......我对这些结果感到困惑。