title
author
date
createtime
categories
win10 uwp 非同步轉同步
lindexi
2018-11-05 10:18:40 +0800
2018-2-13 17:23:3 +0800
win10 uwp
有很多方法都是非同步,那麼如何從非同步轉到同步?
非同步轉同步的執行緒不是 ui 執行緒
如果執行緒是ui執行緒,那麼非同步方法不能在另外乙個執行緒。
看到這裡也許你會疑惑,為何非同步方法可以不在另乙個執行緒?實際上對於 io 等的非同步方法,都是沒有建立執行緒,請看there is no thread
關於這條件是如何來的,請看使用 task.wait()?立刻死鎖(deadlock) - walterlv
可以使用的方法需要獲得是否有返回值,返回值是否需要。
如果需要返回值,使用getresults
如從資料夾獲取檔案:
storagefolderfolder
=storagefolder.getfolderfrompathasync("
").getresults();
這是同步方法,幾乎不需要做什麼修改
如果是沒有返回值或不需要返回值的,請看下面**
storagefolder.getfolderfrompathasync("").astask().wait();
假設乙個方法是沒返回的,可以使用wait
foo().wait();private
async
task
foo()
通過這個方法就可以把非同步方法轉同步。
如果需要反過來,把同步轉非同步,可以使用 同步方法轉非同步
awaittask.run(() =>
);
直接在ui使用task.run
privatevoid
button_onclick(object
sender, routedeventargs
e) ).result;
}
使用task.delay
等待
privatevoid
button_onclick(object
sender, routedeventargs
e)
即使使用方法,裡面使用 io 也有可能死鎖
privatevoid
button_onclick(object
sender, routedeventargs
e)
private
async
task
doasync()
在ui使用非同步會建立執行緒的方法
privatevoid
button_onclick(object
sender, routedeventargs
e)
async
task
doasync()
);}
privatevoid
button_onclick(object
sender, routedeventargs
e)
async
task
doasync()
privatevoid
button_onclick(object
sender, routedeventargs
e)
private
async
task
doasync()
);}
參見:使用 task.wait()?立刻死鎖(deadlock) - walterlv
2018 11 5 win10 uwp 非同步轉同步
title author date createtime categories win10 uwp 非同步轉同步 lindexi 2018 11 05 10 18 40 0800 2018 2 13 17 23 3 0800 win10 uwp 有很多方法都是非同步,那麼如何從非同步轉到同步?非同步...
win10 uwp 繫結密碼
win10 下,密碼框無法繫結到viewmodel,password是不可以繫結。我們可以自己使用簡單方法去繫結 我們之前在wpf 使用繫結密碼框,我寫了一篇,關於如何繫結,我提供乙個我自己試了可以的類。首先,我們新建乙個類,這個類是讓 passwordbox 可以繫結password。uwp讓 p...
win10 uwp 重啟軟體
在16299支援在軟體自己重啟,不需要讓使用者點選關閉然後啟動,雖然我還不知道這個有什麼用。本文告訴大家如何讓軟體關閉重新開啟 首先需要使用的版本是 16299 然後使用 requestrestartasync 方法就可以關閉軟體重新開啟。下面就是簡單的軟體 100 horizontalalignm...