读书人

不支持一个 STA 线程上针对多个句柄的

发布时间: 2012-03-30 17:32:09 作者: rapoo

不支持一个 STA 线程上针对多个句柄的 WaitAll。
<MTAThreadAttribute()> _
Sub BindMultiData()
Dim CusQueryStr As String = "select * from customers where companyName ='Alfreds Futterkiste'"

Dim SupQueryStr As String = "SELECT Customers.CompanyName, Customers.ContactName," & _
"Orders.OrderID, Orders.OrderDate, " & _
"Orders.RequiredDate, Orders.ShippedDate " & _
"FROM Orders, Customers " & _
"WHERE Orders.CustomerID = Customers.CustomerID " & _
"AND Customers.CompanyName = 'Alfreds Futterkiste' " & _
"ORDER BY Customers.CompanyName, Customers.ContactName"

Using myCon As SqlConnection = New SqlConnection(ConStr)
Dim CusCmd As SqlCommand = New SqlCommand(CusQueryStr, myCon)
Dim SupCmd As SqlCommand = New SqlCommand(SupQueryStr, myCon)

Dim CusDR As SqlDataReader
Dim SupDr As SqlDataReader

Dim CusisynResult As IAsyncResult
Dim SupisynResult As IAsyncResult

'创建句柄数组
Dim WHandles() As System.Threading.WaitHandle = {New AutoResetEvent(False), New AutoResetEvent(False)}
' Private Shared waitHandles() As WaitHandle = {New AutoResetEvent(False), New AutoResetEvent(False)}


Dim CusHandle As System.Threading.WaitHandle
Dim SupHandle As System.Threading.WaitHandle

myCon.Open()

CusisynResult = CusCmd.BeginExecuteReader(CommandBehavior.CloseConnection)
SupisynResult = SupCmd.BeginExecuteReader(CommandBehavior.CloseConnection)

CusHandle = CusisynResult.AsyncWaitHandle
SupHandle = SupisynResult.AsyncWaitHandle

'将等待句柄赋值给句柄数组
WHandles(0) = CusHandle
WHandles(1) = SupHandle

'将数组传给waitall方法,等待所以的异步查询完成
System.Threading.WaitHandle.WaitAll(WHandles) ‘//////////就是这儿提示错了


CusDR = CusCmd.EndExecuteReader(CusisynResult)
SupDr = SupCmd.EndExecuteReader(SupisynResult)


Dim Cusbs As BindingSource = New BindingSource
Cusbs.DataSource = CusDR
DataGridView1.DataSource = Cusbs

Dim SupBs As BindingSource = New BindingSource
SupBs.DataSource = SupDr
DataGridView1.DataSource = SupBs


End Using

End Sub

[解决办法]
ding 有没有高手?

读书人网 >VB Dotnet

热点推荐