我是xamarin android app的新手。我想构建一个应用程序,我已经读过与数据库的连接或查询的执行应该从主线程异步发生,否则UIthread可能会崩溃。我找到了两种方法那样做:
第一种方式:
WebClient client = new WebClient();
Uri uri = new Uri("http://192.168.2.8/CreateUsername.php");
NameValueCollection parameters = new NameValueCollection();
parameters.Add("Name", txtname.text);
client.UploadValuesCompleted += Client_UploadValuesCompleted;
client.UploadValuesAsync(uri,parameters); ---> is this gonna create a new thread and run asynchronously???
(这里我找到了第一种方式:https://www.youtube.com/watch?v=jF3D__ibrx8)
SecondWay:
两种方式都是正确的?两种方式都会创建一个新的线程并异步运行?谢谢!!!!
答案 0 :(得分:0)
两个例子都没问题,但我通常首先相信Xamarin的官方文档。您可能会对第一个示例感到困惑的是,在调用UploadValuesAsync
方法时缺少await关键字。这是实际发生的事情:
Client_UploadValuesCompleted
。正如您在MSDN上的WebClient.UploadValuesAsync页面上看到的那样,它指出:
这些方法不会阻止调用线程。
另外,在查看source code for UploadValuesAsync时,您会注意到顶部定义了以下属性:
[HostProtection(ExternalThreading=true)]
表示以下内容:
公开外部线程的代码会创建或操纵自己以外的线程,这可能对主机有害。
总而言之,上传过程是在另一个后台线程上处理的,否则,您的代码将同步运行。 Xamarin的样本中出现了一些异步性。