Я бы хотел остановить метод до тех пор, пока пользовательский делегат не предоставит обратный вызов от одного метода слушателю другого в Xamarin.Android, но у меня возникли большие проблемы с пониманием реализации такого слушателя.
Я только пытался понять, как это можно сделать, но я застрял на том, как будет создан и вызван делегат.
Допустим, я хочу, чтобы этот метод MainActivity остановился
public async override void OnWindowFocusChanged(bool hasFocus)
{
base.OnWindowFocusChanged(hasFocus);
//how can I create a listener to stop this method until callback from OnPause?
//await a delegate task?
}
и ожидайте другого метода внутри фрагмента:
public override void OnResume()
{
base.OnResume();
//I'd like to implement a delegate here to notify the OnWindowFocusChanged that OnResume method has been invoked
//what would be the construction of such?
}
Как я могу это сделать?
Из моего исследования я считаю, что мне нужно будет создать задачу делегата, а затемжду его возвращения в OnWindowFocusChanged.Однако меня смущает реализация такого решения.Если бы кто-нибудь мог привести хотя бы самый простой пример псевдокода, он бы мне очень помог.
РЕДАКТИРОВАТЬ: я изменил OnPause на OnResume, потому что это более полезно для понимания того, что я пытаюсь сделать.Приведенный ниже ответ ссылается на OnPause, но в любом случае эти два метода чрезвычайно похожи.
Вот пример того, что почти делает то, что я пытаюсь сделать;за исключением того, что вместо запуска моего метода при вызове OnResume OnWindowFocusChanged останавливается на 10000 мс.Поэтому я хотел бы заменить таймер пользовательской задачей делегата (аналогично событию), которая возвращается при вызове Fragment.OnResume.
public async override void OnWindowFocusChanged(bool hasFocus)
{
base.OnWindowFocusChanged(hasFocus);
//we won't pass this line for 10000ms; how to replace with Task return?
await WaitHere();
}
async Task WaitHere()
{
System.Threading.Thread.Sleep(10000);
}