我正在测试使用 Fabulous 框架编写功能性跨平台应用程序的 UWP 应用程序,并且我想在按下按钮时使用 FilePicker 并将所选文件用于某些数据处理。
Executing
let fileResult = FilePicker.PickAsync() |> Async.AwaitTask
打开文件选择器并在选择Async<FileResult>
文件后返回 a (这表示按钮和后续函数调用执行),但它后面的其余代码将在结果可用之前执行。如果我附加|> Async.RunSynchronously
它(如预期的那样)阻塞线程并且在出现的窗口中不能选择任何文件,尽管返回值将是 FileResult。
在研究了应该如何完成之后,我意识到应该在主线程上打开文件选择器,这导致我找到了以下表单的解决方案
let getFileResultAsync =
async {
let tcs = new TaskCompletionSource<FileResult>()
Device.BeginInvokeOnMainThread(fun () ->
async {
let! fileResult = FilePicker.PickAsync() |> Async.AwaitTask
tcs.SetResult(fileResult)
}
|> Async.StartImmediate
)
return! tcs.Task |> Async.AwaitTask
}
这将返回Async<FileResult>
,但似乎从未访问过 Device.BeginInvokeOnMainThread 块。我将如何打开 FilePicker,选择一个文件,然后在这样的应用程序中处理该文件?