与这个问题相关,我正在尝试实现一个使用 WinRT API 设置桌面壁纸的过程。为了模仿await
C# 中的功能,我使用了此处和此处概述的TTask.Future
(链接) 。
我的实现如下所示:
class procedure TUtilityWin.SetWallpaper(AFileName: String);
var
lStorageFile: IStorageFile;
liao_storagefile: IAsyncOperation_1__IStorageFile;
lFutureTask: IFuture<IAsyncOperation_1__IStorageFile>;
begin
//WinRT Implementation
if TUserProfile_UserProfilePersonalizationSettings.IsSupported then
begin
lFutureTask:=TTask.Future<IAsyncOperation_1__IStorageFile>(
function: IAsyncOperation_1__IStorageFile
begin
Result:=TStorageFile.GetFileFromPathAsync(HSTRING(AFileName));
end);
liao_storagefile:=lFutureTask.Value;
lStorageFile:=liao_storagefile.GetResults;
TUserProfile_UserProfilePersonalizationSettings.Current.TrySetWallpaperImageAsync(lStorageFile);
end;
end;
据我了解,当我尝试获取lFutureTask.Value
时,应用程序会暂停当前线程,直到 lFutureTask 完成(如果尚未完成),然后提供该值。但是,当我运行应用程序时,我收到错误消息:EOleException with message 'A method was called at an unexpected time'
. 休息在这一行:lStorageFile:=liao_storagefile.GetResults;
我是 TTask 和 WinRT API 的新手——所以我确定我在这里遗漏了一些非常基本的东西。希望能提供任何有关导致此问题的原因或我可以采取不同措施来解决此问题的任何指示。提前致谢。