2010-12-14 10 views
1

-Code Rückruf in C#:Wie Parameter zu übergeben, um Rückruf?

private void CallbackVisibleButton(IAsyncResult ar) 
{ 
    AsynchronousVisibleButtonDelegate asyncDeleg = (AsynchronousVisibleButtonDelegate)ar.AsyncState; 
    b.Visibility = asyncDeleg.EndInvoke(ar);// b - not see! 
} 
private delegate Visibility AsynchronousVisibleButtonDelegate(Button b); 
private Visibility AsynchronousVisibleButton(Button b) 
{ 
    Thread.Sleep(2000); 
    return Visibility.Visible; 
} 

und createted (b-Taste 5 Sekunden nach der Taste sollte sichtbar sein):

AsynchronousVisibleButtonDelegate asyncDeleg = new AsynchronousVisibleButtonDelegate(AsynchronousVisibleButton); 
AsyncCallback callback = new AsyncCallback(CallbackVisibleButton); 
asyncDeleg.BeginInvoke(b, callback, asyncDeleg); 

Problem: CallbackVisibleButton - nicht sieht, die Taste

Antwort

1

Vielleicht unterhalb der Code wird Ihr Problem lösen. Entfernen CallBackVisib ... Methode und tun, wie in Ihrem Haupt-Code folgt:

 AsynchronousVisibleButtonDelegate asyncDeleg = new AsynchronousVisibleButtonDelegate(AsynchronousVisibleButton); 
     AsyncCallback callback = new AsyncCallback(p => 
                 { 
                  var anotherState = 
                   p.AsyncState as AsynchronousVisibleButtonDelegate; 
                  b.Visible = anotherState.EndInvoke(p); 
                 }); 
     asyncDeleg.BeginInvoke(b, callback, asyncDeleg); 
1

verwenden Sie den dritten Parameter des BeginInvoke zusätzliche Informationen zu senden. dann können Sie es durch die IAsyncResult.AsyncState Eigenschaft erhalten.

hier ein Beispiel: http://progtutorials.tripod.com/C_Sharp.htm

Verwandte Themen