0

Кто-нибудь слышал о каких-либо проблемах с тем, что MessageDialog не отображается на планшетах Windows 8? Или, более конкретно, Samsung 700t? Он использует обычный процесс intel, а не ARM. Я построил приложение на ноутбуке, а показания messagedialog при отладке с ноутбука, отображается на планшете, но не отображается на фактическом планшете.Диалог сообщений не отображается на планшете Windows 8 - Caliburn.Micro/C#

Я использую интерфейс Caliburn.Micro IResult для отображения messagedialog в представлении.

Heres snippits кода, который я использую:

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, который отключает всплывающие окна приложения, но я не смог его найти.

Любые идеи?

+0

У вас есть другой планшет RT, который вы можете использовать, чтобы попробовать это? Код выглядит нормально для меня, но может ли быть какой-то бросок во время 'ShowAsync'? Это приведет к тому, что coroutine будет отменен (он не будет генерировать исключение больше, он просто помещает его в обратный вызов результата). – Charleh

ответ

1

Вы обрабатываете обратный вызов Coroutine.Execute?

Обратный вызов на Execute может перезвонить с исключением брошенного сопрограммами - это молча терпеть неудачу, если вы не были явно искали его в функции обратного вызова

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

Может быть асинхронным AWAIT бросают или что-то подобное (не могу понять, почему!)

Edit:

А кроме того, материал в вашем перечислителем также может бросить:

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

Любое может быть сделано, если внешний перечислитель проглотит исключение, если не обрабатывается в обратном вызове - или может быть nullref на conn?

+0

выглядит как ваше право, ему не нравится вызов GetInternetConnectionProfile(), я также выполняю такая же проверка при запуске, и он падает на эту часть, если устройство не имеет доступа в Интернет. Похоже, что он сбой где-то внутри метода GetInternetConnectionProfile(). Отладка - это боль в а ** на этом планшете, при этом экран настолько мал. Возможно, это проблема аппаратного обеспечения с планшетом, так как он работает с той же ОС, что и ноутбук. –

+0

Время для высокой пятерки? (и upvote?), за которым следует грустное лицо :( – Charleh

+0

Я не думаю, что это проблема с ennumerator, потому что, когда он не работает в app.xaml.cs, я не использую ennumerator или даже messagedialog Определенно, что-то связано с получением информации о сети с устройства. Спасибо за то, что вы ведете меня в правильном направлении! –

1

Причина, по которой GetInternetConnectionProfile() возвращала null ref, была связана с тем, что когда на ноутбуке, если вы отключитесь от беспроводного соединения, профиль подключения к Интернету для ноутбука по умолчанию установлен на ethernet, тогда как планшет (по крайней мере, Samsung 700T) не имеет Ethernet-порта, поэтому профиль подключения не существует, если беспроводное соединение не установлено.

Благодаря Шарле для указания меня в правильном направлении.