阻止UI线程,直到我的呼叫完成,然后恢复

时间:2017-05-26 19:55:47

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

我正在做一个Xamarin.iOS应用程序。

我希望在我的应用加载(预加载数据)之前从我的API获取客户/购物数据,而不是在用户使用应用时调用它。我想我需要在AppDelegate中挂起东西,这样我就可以把它放在启动画面上,直到我的API调用完成。假设用户在应用启动时登录。

我从应用程序的其他部分异步调用的异步方法是:

class MySQLDatabase {
  function __construct(){
if(file_exists(ROOT_PATH.'config.php')){
        $db_config = json_decode(file_get_contents(ROOT_PATH.'config.php'), true);
        $this->open_connection(db_config);
}}

function open_connection() {
    $this->connection = mysqli_connect(
            $this->db_config['DBLocation'], 
            $this->db_config['DBName'], 
            $this->db_config['DBPassword'], 
            $this->db_config['DBUsername']
    );

    if(mysqli_connect_errno()) {
        echo "Connection failed: " . mysqli_connect_error();
    }
}

但是我在ViewDidLoad或其他领域调用它。我现在想要在应用程序启动之前获取所有这些信息。所以我不小心弄清楚我要么永久地挂起整个应用程序(使用.result,还没弄清楚如何让它在完成后停止)或让它以异步方式运行,但没有运气实现同步暂时运行的所需行为,直到逻辑完成。

你建议我在AppDelegate中使用什么方法?

也许

public async Task<CustomerShoppingSummary> GetCustomerShoppingSummary()

是否同步运行此建议并阻止UI线程直到完成?

谢谢!

1 个答案:

答案 0 :(得分:1)

我最后在主页上使用了一个微调器,因为它毕竟看起来更好。

非常感谢大家:)