【问题标题】:Message Dialog not displaying on Windows 8 tablet - Caliburn.Micro/C#Windows 8 平板电脑上未显示消息对话框 - Caliburn.Micro/C#
【发布时间】:2013-05-02 14:17:03
【问题描述】:

有没有人听说过 MessageDialog 没有在 Windows 8 平板电脑上显示的问题?或者更具体地说是三星700t?它使用常规的英特尔进程而不是 ARM。我在笔记本电脑上构建了应用程序,从笔记本电脑调试时会显示消息对话框,在平板电脑模拟器上显示,但在实际平板电脑上不显示。

我正在使用 Caliburn.Micro IResult 接口在视图中显示消息对话框。

以下是我正在使用的代码片段:

public IEnumerable<IResult> NavExecute(String method)
{
    Windows.UI.ViewManagement.ApplicationView.TryUnsnap();
    var conn = NetworkInformation.GetInternetConnectionProfile();
    if (conn.GetNetworkConnectivityLevel() != NetworkConnectivityLevel.InternetAccess)
    {
        yield return new MessageDialogResult("Internet Connection Not Detected", "Connection Error");
        netOn = false;

    }

} 以上是我的视图模型基类,下面是 IResult 类本身的实现:

public class MessageDialogResult : ResultBase
{
    private readonly string _content;
    private readonly string _title;

    public MessageDialogResult(string content, string title)
    {
        _content = content;
        _title = title;
    }

    public async override void Execute(ActionExecutionContext context)
    {
        var dialog = new MessageDialog(_content, _title);

        await dialog.ShowAsync();

        OnCompleted();
    }
}

我怀疑这不是代码的问题,因为我在两个设备上都在 x86 模式下进行调试(在有人问我为什么不对所有设备进行调试之前,这是因为我使用的是 SQLite,它需要一个单独的包每个架构。)

我不确定 Windows 8 中是否存在禁用应用弹出窗口的设置,但我找不到。

有什么想法吗?

【问题讨论】:

  • 您还有其他 RT 平板电脑可以用来试用吗?代码对我来说看起来不错,但在ShowAsync 期间会发生什么事情吗?这将导致协程中止(它不会再抛出异常,它只是将其放入结果回调中)

标签: windows-8 microsoft-metro caliburn.micro tablet-pc messagedialog


【解决方案1】:

你在处理Coroutine.Execute的回调吗?

Execute 上的回调可能会以协程抛出的异常进行回调 - 如果您没有在回调中明确查找它,这将静默失败

Coroutine.Execute(YourEnumerator(), new ActionExecutionContext { Blah }, (o, e) => {
    if(e.Error != null) // Something went wrong
});

也许异步等待正在抛出或类似的东西(想不出为什么!)

编辑:

你的枚举器中的其他东西也可以抛出:

Windows.UI.ViewManagement.ApplicationView.TryUnsnap();
var conn = NetworkInformation.GetInternetConnectionProfile();

如果未在回调中处理,任何一个都可能抛出使外部枚举器吞下异常 - 或者可能是 conn 上的 nullref?

【讨论】:

  • 看起来像你的权利,它不喜欢 GetInternetConnectionProfile() 调用,我也在启动时进行相同的检查,如果设备无法访问互联网,它会在这件作品上崩溃。看起来它在 GetInternetConnectionProfile() 方法中的某个地方崩溃了。由于屏幕太小,在这款平板电脑上调试是一件痛苦的事情。可能是平板电脑的硬件问题,因为它运行的操作系统与笔记本电脑相同。
  • 高五的时间? (还有点赞?)然后是一张悲伤的脸:(
  • 我不认为这是枚举器的问题,因为当它在 app.xaml.cs 中失败时,我没有使用枚举器,甚至没有使用消息对话框。绝对与从设备获取网络信息有关。感谢您带领我朝着正确的方向前进!
  • 如果它没有从var conn = NetworkInformation.GetInternetConnectionProfile 调用中返回任何内容,那么您有一个空引用,但在下一行使用它之前您没有进行空检查...
  • 不知道是什么原因导致的 - 我从来没有为 WinRT 编程过:P 只是非常了解 CM(并且 CM 代码库是共享的)。如果它返回 null 是的,你会在使用时得到一个 throw,但是因为执行被包装在一个 CM SequentialResult 中,(这会枚举可枚举的句柄和异常)你不会看到异常。相反,Couroutine 停止枚举并立即触发传递异常的回调。这意味着如果您不处理回调,它可能会静默失败 - 所以这是您最有可能遇到的情况
【解决方案2】:

GetInternetConnectionProfile() 返回 null ref 的原因是,在笔记本电脑上,如果您断开无线连接,笔记本电脑的互联网连接配置文件默认为以太网,而平板电脑(至少三星 700T ) 没有以太网端口,因此如果未建立无线连接,则它的连接配置文件不存在。

感谢 Charleh 为我指明了正确的方向。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-18
    • 2013-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多