私は、GUIウィンドウと非同期で機能する関数を取得しようとしてきましたが、成功は非常に限られていました。
以下のコードは、デリゲートとコールバックを備えた私の関数XXXです。これにより、エラーが発生することなくGUIスレッドを停止できます。
ただし、関数ではなくSubであり、引数がない場合は機能します。
戻り値を確認できるように変更する方法がわかりません...いくつかの例で少し助けが見つかりました、http://msdn.microsoft.com/en-us/library/system.iasyncresult.asyncstate .aspx-しかし、それらはコールバックで戻り値を出力し、呼び出し元でそれを取得する方法がわかりません。
関数で引数を使用する方法が見つかりません。
Private Function XXX_Callback(ByVal ia As IAsyncResult)
Dim d As XXXDelegate = CType(CType(ia, Runtime.Remoting.Messaging.AsyncResult).AsyncDelegate, XXXDelegate)
d.EndInvoke(ia)
Dim result As AsyncResult = CType(ia, AsyncResult)
Dim caller As XXXDelegate = CType(result.AsyncDelegate, XXXDelegate)
Dim returnValue As Boolean = caller.EndInvoke(ia)
XXX_Finish() ' needs the "vvv argument, I don't know how to get it
' The returnValue is here but I don't know how to send it to the caller
End Function
'Private Function XXX_Finish(ByVal vvv as Boolean) As Boolean
' this probably needs to return something, I don't know what/ how to get it
Private Function XXX_Finish() As Boolean
' something
myGui.Finish()
End Function
' Private Delegate Function XXXDelegate(ByVal vvv As Integer) As Boolean
' Public Function XXX(ByVal vvv As Integer) As Boolean ' This is what I would like
Private Delegate Sub XXXDelegate()
Public Sub XXX()
'
myGui.Update()
'
End Sub
Public Sub Caller()
'
myGui = New SomeGui()
myGui.Begin()
Dim t As New XXXDelegate(AddressOf XXX)
t.BeginInvoke(AddressOf XXX_Callback, Nothing)
' more code, another call
End Sub
Private myGui As SomeGui
誰かが私がこれをより良い形にするのを手伝ってくれるでしょうか、それとも助けになるいくつかの例を手に入れることができますか?過去2日間に見つけたもので、行き止まりになりました...
ありがとうございました。