2016-04-23 2 views
5

Приложение моего UWP работает в режиме декомпрессии и отлично работает в режиме отладки, но я не могу сказать, в чем проблема, но я знаю, что это связано с комбинация поднятия события из System.Threading.Timer и MVVMLight.Ошибка приложения UWP Windows 10 в режиме деблокирования, но отлично работает в режиме отладки

Я создал новое фиктивное приложение и использовал тот же код (ZXing.net.mobile, где я использовал 2 портативные библиотеки, и я использовал свой собственный пользовательский элемент управления, который является упрощенной версией их). Я использую события вместо <Action>). Это прекрасно работает, и я в настоящее время пытаюсь внести в него больше шагов, то есть включить mvvmlight и навигацию, но до сих пор я не могу воспроизвести проблему в этом фиктивном приложении.

Ошибка я получаю:

Unhandled exception at 0x58C1AF0B (mrt100_app.dll) in Company.MyApp.App.exe: 
0xC0000602: A fail fast exception occurred. Exception handlers will not be 
invoked and the process will be terminated immediately. 

Последовал:

Unhandled exception at 0x0107D201 (SharedLibrary.dll) in 
Company.MyApp.App.exe: 0x00001007. 

При взгляде на окно Threads, один из рабочего потока имеет следующую информацию, если это помощь.

Not Flagged > 4012 0 Worker Thread <No Name> 
    System.Private.Interop.dll!System.Runtime.InteropServices. 
    ExceptionHelpers.ReportUnhandledError Normal 
    [External Code] 
    System.Private.Interop.dll!System.Runtime.InteropServices.ExceptionHelpers. 
    ReportUnhandledError(System.Exception e) Line 885 
    System.Private.Interop.dll!Internal.Interop.InteropCallbacks.ReportUnhandledError 
    (System.Exception ex) Line 17 
    System.Private.WinRTInterop.CoreLib.dll!Internal.WinRT.Interop.WinRTCallbacks. 
    ReportUnhandledError(System.Exception ex) Line 274 
    System.Private.CoreLib.dll!System.RuntimeExceptionHelpers.ReportUnhandledException 
    (System.Exception exception) Line 152 
    System.Private.Threading.dll!System.Threading.Tasks.AwaitTaskContinuation. 
    ThrowAsyncIfNecessary(System.Exception exc) Line 784  
    System.Private.Threading.dll!System.Threading.WinRTSynchronizationContext.Invoker. 
    InvokeCore() Line 182 
    System.Private.Threading.dll!System.Threading.WinRTSynchronizationContext.Invoker. 
    Invoke(object thisObj) Line 162  
    System.Private.CoreLib.dll!System.Action<System.__Canon>. 
    InvokeOpenStaticThunk(System.__Canon obj) 
    System.Private.WinRTInterop.CoreLib.dll!Internal.WinRT.Interop.WinRTCallbacks.PostToCoreDispatcher.AnonymousMethod__0() Line 266  
    MyCompany.MyApp.App.exe 
    MyCompany.MyApp.App.ViewModels.ValidateHandler.Invoke(string pin) 
    MyCompany.MyApp.App.McgInterop.dll!McgInterop.ReverseComSharedStubs 
    .Proc_(object __this, System.IntPtr __methodPtr) Line 6163 
    MyCompany.MyApp.App.McgInterop.dll!Windows.UI.Core.DispatchedHandler__Impl.Vtbl.Invoke__STUB(System.IntPtr pComThis) Line 45147  
    [External Code] 

В моей QR Code UserControl, он использует System.Threading.Timer и это вызывает событие, когда QR-код будет найден:

timerPreview = new Timer(async (state) => 
{ 
    .... 
    // Check if a result was found 
    if (result != null && !string.IsNullOrEmpty(result.Text)) 
    { 
    Debug.WriteLine("Barcode Found: " + result.Text); 
    if (!this.ContinuousScanning) 
    { 
     delay = Timeout.Infinite; 
     await StopScanningAsync(); 
    } 
    else 
    { 
     delay = this.ScanningOptions.DelayBetweenContinuousScans; 
    } 
    OnBarcodeFound(result.Text); 
    } 

    timerPreview.Change(delay, Timeout.Infinite); 

}, null, 
    this.ScanningOptions.InitialDelayBeforeAnalyzingFrames, 
    Timeout.Infinite); 

На странице, которая у себя QRCode UserControl, я «ве получил следующий код:

private async void ScannerControl_BarcodeFound(string barcodeValue) 
{ 
    var dispatcher = CoreApplication.MainView.CoreWindow.Dispatcher; 

    await dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal,() => { 
     Debug.WriteLine(barcodeValue); 
     GetViewModel.BarcodeFound(barcodeValue); 
    }); 
} 

Как вы можете видеть, я передаю значение QRcode моего ViewModel и оттуда, я послал сообщение, а затем перенаправлять на другую страницу:

public void BarcodeFound(string barcodeData) 
{ 
    Messenger.Default.Send<string>(barcodeData, MessengerTokens.QrCodeFound); 
    this.NavigationFacade.NavigateToMyOtherPage(); 
} 

Я мог бы продолжать и предоставлять дополнительный код, но поскольку я добавляю дополнительные точки останова, я вижу, что код и передача правильного значения и переход в правильное место, но в итоге он выдает эту ошибку. Если я добавлю дополнительные обработчики ошибок или код диспетчера, он в конечном итоге работает и переходит на следующую страницу, как ожидалось, но когда я нажимаю кнопку в моем CommandBar, это занимает некоторое время, и в итоге она вызывает ту же ошибку, поэтому добавив эти дополнительные биты кода, я чувствую, что я просто сжимаю проблему дальше по линии.

У кого-нибудь есть предложения по поводу того, как я обойду эту проблему. Мне жаль, что я не могу поделиться полным приложением, но определенно не могу. Поэтому я знаю, что будет сложно предоставить решение, но если у кого-то есть предложения, я буду благодарен им.

Как я уже сказал, проблема связана с комбинацией потоков и mvvmlight, но это заставляет меня гадать, что мое тестовое приложение работает так, как ожидалось, поэтому я уверен, что это не Zxing или мой UserControl.

Любая помощь, предложения были бы оценены или если вам нужно предоставить дополнительную информацию, пожалуйста, сообщите мне, что и я постараюсь предоставить.

Спасибо.

+0

Возможно, это проблема, связанная с .NET. Собственный скомпилированный код, используемый в relase? Вы пробовали отладку с включенной «Компиляцией с цепочкой инструментов .NET?»? – Plac3Hold3r

+0

Привет, я уже пробовал это, и я также попробовал его с выбранным «Оптимизировать код» и до сих пор не сбой в режиме отладки. – Thierry

ответ

0

Ну, это было кропотливое упражнение и огромная трата моего времени!

Это было к нескольким вещам !!

  1. Я использовал другой DataService в режиме Release, который не был реализован. Реализовано, я имею в виду, что все мои функции возвращали значения NotImplementedException или null.

  2. При передаче моей модели в мою модель ViewModel я не проверял, было ли оно нулевым, что привело к необработанному exceptions.

  3. У меня была цепочка событий mvvmlight (Messenger.Default.Send <>), и никто не проверял наличие ошибок или нулевых значений.

Хотя все они были вызваны плохой проверкой с моей стороны, эти ошибки очень плохо представлены в режиме Release! если бы с самого начала, я получил исключение NullReferenceException или любые исключения, это немедленно привело бы меня в правильное направление, но бросать ошибки, такие как то, что у меня было, было совершенно бесполезно, но это не было, !!

Все, что я могу сказать, заключается в том, что если эта проблема когда-либо случится с вами, не тратьте время на переписывание кода или попытку найти обходные пути. Сначала проработайте свой рабочий процесс/цепочку событий и, надеюсь, вы в конце концов поймаете преступника.

Надеюсь, это поможет.

+0

Привет, у моего приложения такая же проблема. В прошлый раз (как и 6 месяцев назад) я удалил приложение, перезапустил и установил снова, и все было в порядке. Так что я не думаю, что ваше или мое решение это настоящее решение. Теперь у меня есть ошибка еще раз, но я не хочу пытаться переустановить, как в прошлый раз, я хочу, чтобы выкопать ошибку в первую очередь. В то время я читал, что эта ошибка ddl может быть вызвана множеством проблем на стороне системы, не прочитав файл dll. Или, что, похоже, было моим делом, какие-то испорченные ссылки в реестре, потому что мне нужен доступ к каталогу изображений. –

+0

Итак, вы когда-нибудь возникали эту проблему и исправляли ее по-другому? –

0

К сожалению, мы столкнулись с аналогичной проблемой, наша была связана с установкой значений классификатора для изменения локализации «на лету» в приложении, но придумала неполадки с ошибками/встроенные ошибки SharedLibrary. Обновление пакета Microsoft.NETCore.UniversalWindowPlatform с 6.0.4 до 6.0.7, похоже, решило проблему.

Только подумал об этом, потому что в другом месте, где я исследовал эту ошибку, кто-то решал проблему SharedLibrary, обновляя свой пакет NETCore, этот случай был ранее (5.x), но считал, что это стоит того.

Смежные вопросы