"Sistemi" nasıl düzeltebilirim?Kaplayan.Görevler.TaskCanceledException: 'Bir görev iptal edildi."uygulama çıkışında istisna (Winforms)?

0

Soru

Bir MediaElement denetimini barındırmak için Elementhost'u kullanan ve oynatmayı kontrol etmek için bir dispatchertimer'a sahip olan (Kaydırıcıyı güncellemek gibi) bir WinForms MP3 çalar masaüstü uygulamasına (. NET Framework 4.7.2) sahibim.

Her şey iyi çalışıyor, ancak uygulamadan çıktığımda "System.Threading.Tasks.TaskCanceledException: 'A task was canceled.'" istisna (Yalnızca hata ayıklayıcının altında çalışırken fark ettim).

Bu bir sıkıntıdan başka bir şey değil ve çoğunlukla zararsız hissediyor, ama anlamadığım istisnaları sevmiyorum. Callstack süper kullanışlı değil:

>   mscorlib.dll!System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(System.Threading.Tasks.Task task)   Unknown
    mscorlib.dll!System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task task)  Unknown
    WindowsBase.dll!System.Windows.Threading.DispatcherOperation.Wait(System.TimeSpan timeout)  Unknown
    WindowsBase.dll!System.Windows.Threading.Dispatcher.InvokeImpl(System.Windows.Threading.DispatcherOperation operation, System.Threading.CancellationToken cancellationToken, System.TimeSpan timeout)   Unknown
    WindowsBase.dll!System.Windows.Threading.Dispatcher.Invoke(System.Action callback, System.Windows.Threading.DispatcherPriority priority, System.Threading.CancellationToken cancellationToken, System.TimeSpan timeout) Unknown
    WindowsBase.dll!MS.Internal.WeakEventTable.OnShutDown() Unknown
    WindowsBase.dll!MS.Internal.WeakEventTable.WeakEventTableShutDownListener.OnShutDown(object target, object sender, System.EventArgs e)  Unknown
    WindowsBase.dll!MS.Internal.ShutDownListener.HandleShutDown(object sender, System.EventArgs e)  Unknown

Bu, WPF yığınının bir şekilde düzgün bir şekilde bertaraf edilmemesi nedeniyle mi oluyor? Dispatchtimer'ımın MainForm_FormClosing içinde durdurulduğundan emin oluyorum, ancak belki de temizlemem gereken başka bir şey var mı?

Tabii ki can sıkıcı bir konu değil.

c# winforms wpf
2021-11-22 00:41:19
2

En iyi cevabı

1

Bu Özel Durum, zaman uyumsuz bir yöntemin tamamlanana kadar çalışmasına izin verilmediğinde atılır-diğer zaman uyumsuz yöntemlerin aynı olması için CancellationToken gerekirse incelikle işlemeyi durdurabilir.

Kullandığınız kütüphanelerden birinden yakalanmamış bir istisna gibi göründüğü için muhtemelen bunu görmezden gelebilirsiniz. Sizi gerçekten rahatsız ediyorsa ve kod tabanınızda olmadığını biliyorsanız, İstisnayı ıslatabilirsiniz, ancak bu genellikle iyi bir uygulama olarak kabul edilmez.

2021-11-22 00:48:57

Hangi yöntemin bu istisnanın atılmasına neden olduğunu bulmanın iyi bir yolu var mı? Hangi kütüphanenin buna sebep olduğunu bilseydim daha iyi hissederdim. İstisna atma zamanındaki callstack çok kullanışlı değildir ve uygulama kapanması göz önüne alındığında, çok az çalışan iş parçacığı kalmıştır.
David Airapetyan

Kodunuzu bir catch yan tümcesiyle sarabilir ve suçluyu arama yığınında bulup bulamayacağınızı görmek için üzerine bir kesme noktası koyabilirsiniz. Ne yazık ki, kitaplıklarınızdan biri bir İstisna yakaladıysa ve yeni bir CancellationException yeniden attıysa, tam geçmişi elde edemezsiniz ve en iyi bahsiniz, varsa kitaplığın kaynağına dalıp dalmayacağınızı görmektir.
Chris
0

. NET Framework 4.7.2 ile ilgili bir sorun gibi görünüyor. Sorun ve geçici çözüm burada açıklanmıştır: Shutdownlistener'daki TaskCanceledException.

Tl'dr, Uygulamama aşağıdakileri eklemektir.yapılandırma istisnayı ortadan kaldırdı:

  <runtime>
    <AppContextSwitchOverrides value="Switch.MS.Internal.DoNotInvokeInWeakEventTableShutdownListener=true"/>
  </runtime>
2021-11-22 03:44:26

Diğer dillerde

Bu sayfa diğer dillerde

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................