所以我正在使用Xamarin.iOS,并使用async / await调用api。我似乎遇到了我似乎无法摆脱的情况。
我有一个TouchUpInside按钮事件,该事件具有异步处理程序,并且在处理程序内部,当触发某个事件但不起作用时,我调用PerformSegue。我可以在输出窗口中看到正在创建多个线程,并且所有其他行均按预期执行,但是对PerformSegue的操作被击中,并且仍保留在同一ViewController上。然后,我在working with threads上的Xamarin教程上阅读
如果从后台线程(不是主UI)调用了异步方法 线程),那么仍然需要InvokeOnMainThread。
那也不起作用。
另一方面,如果我从代码中删除了异步/等待并在处理程序中调用PerformSegue,则代码将按预期工作。
有人可以帮助解决这种情况以及发生这种情况的原因。谢谢
这是代码的简化版:
public override void ViewDidLoad()
{
base.ViewDidLoad();
searchButton.TouchUpInside += SearchButton_TouchUpInside;
}
async private void SearchButton_TouchUpInside(object sender, EventArgs e)
{
var dictionary = new Dictionary<string, string>
{
{"searchText", "abc" }
};
searchItemsResult = await client.InvokeApiAsync<items>("search/searchitems", HttpMethod.Get, dictionary);
if (searchItemsResult != null)
{
//InvokeOnMainThread(() => //doesn't work with this
//{
//tried and doe work with this either
//DispatchQueue.MainQueue.DispatchAsync(() =>
//{
//doesn't push to new ViewController
this.PerformSegue("vC2Segue", this);
//});
//});
}
}