UWP: запросить доступ к буферу обмена из фоновой задачи

Я разрабатываю приложение, которое вставляет содержимое в буфер обмена из его фоновой задачи.

public sealed class ToastBackgroundTask : IBackgroundTask {
    public void Run(IBackgroundTaskInstance taskInstance) {
        //Inside here developer can retrieve and consume the pre-defined 
        //arguments and user inputs;
        var toastArgs = taskInstance.TriggerDetails as ToastNotificationActionTriggerDetail;
        var argument = toastArgs.Argument;
        SetClipbordContent(toastArgs.Argument);
    }
    public static void SetClipbordContent(string text) {
        var dataPackage = new DataPackage();
        dataPackage.SetText(text);
        Clipboard.SetContent(dataPackage);
    }
}

Но когда я выполняю строку

Clipboard.SetContent(dataPackage);

поднять это исключение:

The activation of a single-threaded class from MTA is not supported.
(Exception from HRESULT: 0x8000001D)

Обычный обходной путь для обработки этого secario в классическом.Net Framework - это использование класса Thread для выполнения этой части кода в контексте STA ( C# Clipboard.GetText ()), но я не знаю, как это сделать в UWP.

2 ответа

Я использовал это в прошлом для выполнения в потоке пользовательского интерфейса из фонового потока...

await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, async () => {
    // Do something...
}

Полный ответ на основе ответа @Edd:

      using Windows.ApplicationModel.Core;
using Windows.UI.Core;

...

public static void SetClipbordContent(string text) {
    await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
                    {
                        DataPackage dataPackage = new DataPackage();
                        dataPackage.RequestedOperation = DataPackageOperation.Copy;
                        dataPackage.SetText(text);
                        Clipboard.SetContent(dataPackage);
                    });
}
Другие вопросы по тегам