Как передать параметры в обратный вызов? - PullRequest
1 голос
/ 14 декабря 2010

Код обратного вызова в C #:

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;
}

и создан (b - кнопка, через 5 секунд после того, как кнопка должна быть видимой):

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

проблема: CallbackVisibleButton - не видит кнопку

Ответы [ 2 ]

1 голос
/ 14 декабря 2010

Возможно, приведенный ниже код решит вашу проблему.Удалите метод CallBackVisib ... и выполните следующие действия в основном коде:

        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 голос
/ 14 декабря 2010

используйте третий параметр BeginInvoke для отправки дополнительной информации.тогда вы можете получить его через свойство IAsyncResult.AsyncState.

вот пример: http://progtutorials.tripod.com/C_Sharp.htm

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...