- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 ViewModel,它以同步方法实例化一个事件。该事件向 UI 发出信号,表明在继续之前我们需要用户回答"is"或“否”。
我正在尝试显示一个 MessageDialog
并等待用户提供答案 - 是或否。我很难做到这一点。我目前在尝试执行此操作时收到 UnauthorizedAccessException
。
下面是 UI 中的代码:
async Task<bool> Instance_SwitchConfirmation(string question)
{
MessageDialog md = new MessageDialog(question);
md.Commands.Add(new UICommand("Yes", CommandInvokedHandler));
md.Commands.Add(new UICommand("No", CommandInvokedHandler));
md.ShowAsync();
return this.canSwitch;
}
async void CommandInvokedHandler(IUICommand command)
{
this.canSwitch = command.Label == "Yes" ? true : false;
}
我试过:
var uiContext = TaskScheduler.FromCurrentSynchronizationContext();
Task.Factory.StartNew(() => {
MessageDialog md = new MessageDialog(question);
md.Commands.Add(new UICommand("Yes", CommandInvokedHandler));
md.Commands.Add(new UICommand("No", CommandInvokedHandler));
md.ShowAsync();
},
new System.Threading.CancellationToken(),
TaskCreationOptions.PreferFairness, uiContext);
但这失败了,出现了同样的异常。
最后,如果我只是像这样等待 MessageDialog,则不会显示对话框并且 UI 线程会锁定。
MessageDialog md = new MessageDialog(question);
md.Commands.Add(new UICommand("Yes", CommandInvokedHandler));
md.Commands.Add(new UICommand("No", CommandInvokedHandler));
await md.ShowAsync();
如果 MessageDialog
有一个同步版本的 Show()
我会很好,但是 MessageDialog
的异步行为加上我的同步例程,加上交叉线程让我感到困惑。我想知道是否有人可以概述在我的后端 ViewModel 中继续同步方法之前我需要做什么来等待用户在 MessageDialog
上输入。
在此先感谢您的帮助。
最佳答案
参见 Win8 C# Metro dispatcher and RPC_E_WRONG_THREAD和 CoreDispatcher.RunAsync
.
由于您的方法未在 Dispatcher
上执行,您将需要手动调用其上的代码。为了避免重构为回调模式,您可以使用 TaskCompletionSource(T)
设置结果,后台线程将在结果设置后继续。
var tcs = new TaskCompletionSource<bool>();
var dialogTask = tcs.Task;
MessageDialog md = new MessageDialog(question);
md.Commands.Add(new UICommand("Yes"));
md.Commands.Add(new UICommand("No"));
Dispatcher.RunAsync(CoreDispatcherPriority.Normal, async () => {
var result = await md.ShowAsync();
var canSwitch = result.Label == "Yes";
tcs.SetResult(canSwitch);
});
var result = await dialogTask;
return result;
关于c# - MessageDialog - 需要等待用户输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17274865/
我正在使用以下代码在我的应用程序中显示消息对话框: MessageDialog dialog = new MessageDialog(null,
在 Windows Phone 8.1 上,如何在 ShowAsync 调用后以编程方式关闭 MessageDialog? 我试过调用 IAsyncInfo.Close(),它只是抛出 Invalid
我有一个 ViewModel,它以同步方法实例化一个事件。该事件向 UI 发出信号,表明在继续之前我们需要用户回答"is"或“否”。 我正在尝试显示一个 MessageDialog 并等待用户提供答案
如何创建可调整大小的 MessageDialog。 Shell parentShell = Display.getCurrent().getActiveShell(); MessageDialog.o
我正在尝试制作一个程序,一次显示 3 个 MessageDialog 框。我认为如果将 JOPtionPane.showMessageDialog 放入 actionListner 类中用于 swin
我用 Java 开发的软件有问题。用户必须在 JtextPane 中写入文本。当他没有时间写作时,就会出现一个弹出窗口。唯一的问题是:如果用户在弹出消息时正在书写,则弹出窗口会消失,因为按下的键验证了
我想知道如何创建如下图所示的登录屏幕。它看起来像 MessageDialog,但我不知道如何实现那种东西。我在网上搜索这个,但对我这样的初学者没有任何用处。 我知道如何创建 MessageDialog
我目前正在使用 gtk 在 c 中开发一个应用程序,并且我遇到了 MessageDialog 小部件显示的问题。它几乎完全符合我的要求:它会弹出,但 MessageDialog 周围没有显示边框...
我正在创建一个包含一些信息的 MessageDialog。 MessageDialog.openInformation(getShell(), "Success", "Change "+getNumb
我有一个没有图形用户界面的操作类。该类主要是做数据管理。该类是从我的主 GUI 中的方法调用的。我遇到的问题是在出现故障时向用户显示消息。我正在使用 MessageDialog,但它在运行时一直失败。
我一直在尝试用 python 为我的对话消息添加标题,但我做不到。 这是我的代码: dialog=Gtk.MessageDialog(None, 0, Gtk.MessageType.ERROR, G
我正在做 Eclipse 插件开发。我正在使用 MessageDialog 类。可以找到 API here . 我想添加一个链接,就像我在 MessageDialog 的消息中使用“here”所做的那
我在应用程序的多个位置使用了 MessageDialogues。问题是,每当任何 MessageDialog(或系统警报,例如功能警告)处于事件状态并且调用另一个我的 MessageDialog 时,
我的 main.qml 中有以下代码 MessageDialog { id: exitDialog title: "Quit" text: "Save before quit
我在 wxPython 中创建的 MessageDialog 不是交互式的,不允许用户选择和复制其中的文本。有没有我可以使用的另一个类似的 wxPython 小部件,或者我可以对现有的 Message
我在 Windows 8 下使用计划任务来触发一个简单的 .cmd 文件,其中包含一系列步骤,其中一些步骤触发外部 Powershell 脚本。 我想使用 MessageDialog() Window
我想要一个在某些事件发生时提醒用户的应用程序。 我使用 MessageDialog,但问题是只有当应用程序位于屏幕顶部时才会弹出(例如,当用户浏览网页时,他不会收到警报,他必须点击我的应用程序以查看警
我有以下代码。 MessageDialog dialog = new MessageDialog(new Shell(), "title", null, "message", MessageDialo
如何使用 JOptionPane 显示字符串中每个字符的消息对话框?我已经将字符串转换为 char 并将其存储在 ArrayList 中,但我无法让每个 JOptionPane 出现 1 个字符。 这
您好,我正在尝试使用对话框显示错误消息。但是,当我运行代码时,我遇到段错误。 这是函数: void ShowErrorMessage(string message) { Gtk::MessageD
我是一名优秀的程序员,十分优秀!