2018 11 5 win10 uwp 非同步轉同步

2022-01-13 21:28:09 字數 2131 閱讀 5225

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

如從資料夾獲取檔案:

storagefolder

folder

=storagefolder.getfolderfrompathasync("

").getresults();

這是同步方法,幾乎不需要做什麼修改

如果是沒有返回值或不需要返回值的,請看下面**

storagefolder.getfolderfrompathasync("

").astask().wait();

假設乙個方法是沒返回的,可以使用wait

foo().wait();

private

async

task

foo()

通過這個方法就可以把非同步方法轉同步。

如果需要反過來,把同步轉非同步,可以使用 同步方法轉非同步

await

task.run(() =>

);

直接在ui使用task.run

private

void

button_onclick(object

sender, routedeventargs

e) ).result;

}

使用task.delay等待

private

void

button_onclick(object

sender, routedeventargs

e)

即使使用方法,裡面使用 io 也有可能死鎖

private

void

button_onclick(object

sender, routedeventargs

e)

private

async

task

doasync()

在ui使用非同步會建立執行緒的方法

private

void

button_onclick(object

sender, routedeventargs

e)

async

task

doasync()

);}

private

void

button_onclick(object

sender, routedeventargs

e)

async

task

doasync()

private

void

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...