Xamarin.iOS PeformSegue无法与Async / Await一起使用

时间:2019-06-29 05:00:58

标签: c# ios xamarin xamarin.ios async-await

所以我正在使用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); 
               //});
               //});
        }
}

0 个答案:

没有答案