У меня есть решение, в котором есть как компонент Runtime Windows (C#), так и универсальное приложение (JS).Запуск IAsyncOperation из компонента Runtime Windows с использованием JavaScript
Один из моих классов в WRC имеет следующую статическую функцию:
public static IAsyncOperation<Project> Import()
{
return System.Threading.Tasks.Task.Run<Project>(async() =>
{
try
{
FileOpenPicker picker = new FileOpenPicker();
picker.ViewMode = PickerViewMode.List;
picker.SuggestedStartLocation = PickerLocationId.DocumentsLibrary;
picker.FileTypeFilter.Add(".xml");
StorageFile source = await picker.PickSingleFileAsync();
if (source != null)
{
StorageFile destination = await ApplicationData.Current.RoamingFolder.CreateFileAsync(source.Name, CreationCollisionOption.ReplaceExisting);
await source.MoveAndReplaceAsync(destination);
return await Project.Open(source.DisplayName);
}
else
{
return null;
}
}
catch (Exception)
{
return null;
}
}).AsAsyncOperation<Project>();
}
Я пытаюсь вызвать эту функцию из JS с помощью:
SignalOne.Data.Project.import().done(function() {
new Windows.UI.Popups.MessageBox("Done").showAsync();
}
Однако, в то время как «Done» сообщение появляется диалоговое окно открытия файла. Если я помещаю окно сообщения в первую строку внутри попытки C#, оно также не отображается.
Я знаю, что у меня есть верхний регистр импорта на C# и в нижнем регистре импорта в JS, но так оно и происходит с Intellisense, и если я изменю его на верхний регистр в JS, он сработает.
Уверен, что мне не хватает чего-то маленького/глупого, но я не могу на него наложить.
Спасибо.
Привет Джейден, спасибо за Ваш ответ. Когда я перехожу к: Источник храненияFile = null; Ожидание Windows.UI.Core.CoreWindow.GetForCurrentThread(). Dispatcher.RunAsync (Windows.UI.Core.CoreDispatcherPriority.Normal, новый файл Windows.UI.Core.DispatchedHandler (делегат async() { source = wait picker.PickSingleFileAsync(); })); Я получаю недопустимое исключение дескриптора окна. – SignalOne