asynchronen callback synchronisieren

12/12/2008 - 14:56 von Lutz Elßner | Report spam
Es gibt nicht immer eine synchrone Methode z.B. bei IDataSource

DataSourceView.Select(arguments, callback)

Im folgenden Code wird in einer Schleife durch Polling auf das Ergebnis gewartet.
Es muss doch aber möglich sein, ohne Sleep Verzögerung, direkt auf einen
Callback zu warten und den Code genau so lange anzuhalten.

Ich habe schon "WaitFor" irgendwas gefunden, bin aber daraus
nicht schlau geworden.

Also wie wird optimal auf callback gewartet?

Lutz

++++++++++

Private mData As IEnumerable

Private Sub selectCallback(ByVal data As IEnumerable)
Me.mLog(Now.ToString("mm:ss.fffffff") & " c " & data.GetType.Name)
Me.mData = data
End Sub

Function [Select]() As DataView
Dim ds As IDataSource = Me.DataSource
If ds IsNot Nothing Then
Me.mData = Nothing
For Each viewName As String In ds.GetViewNames
Me.mLog(Now.ToString("mm:ss.fffffff") & " v " & viewName)

Dim arguments As New DataSourceSelectArguments
ds.GetView(viewName).Select(arguments, AddressOf selectCallback)

Me.mLog(Now.ToString("mm:ss.fffffff") & " n")
Exit For
Next
Dim i As Integer
Do While Me.mData Is Nothing
System.Threading.Thread.Sleep(10)
i += 1
Loop
Me.mLog(Now.ToString("mm:ss.fffffff") & " " & i)
Return DirectCast(Me.mData, DataView)
Else
Return Nothing
End If
End Function
 

Lesen sie die antworten

#1 Peter Fleischer
12/12/2008 - 18:36 | Warnen spam
"Lutz Elßner" <www.vb-hosting.de> schrieb im Newsbeitrag
news:
Es gibt nicht immer eine synchrone Methode z.B. bei IDataSource

DataSourceView.Select(arguments, callback)

Im folgenden Code wird in einer Schleife durch Polling auf das Ergebnis
gewartet.
Es muss doch aber möglich sein, ohne Sleep Verzögerung, direkt auf einen
Callback zu warten und den Code genau so lange anzuhalten.



Hi Lutz,
ich würde die Methode mittels Invoke asynchron aufrufen und das dem Renderer
mitteilen, um zwischenzeitlich alle anderen Aktivitàten auszuführen.

Viele Grüsse
Peter

Ähnliche fragen