ยังไงฉันซ่อม"ระบบการอ่านจดหมา.งาน.TaskCanceledException:'เป็นงานถูกยกเลิก'" ยกเว้นบนแอพทางออก(Winforms)?

0

คำถาม

ฉันมี WinForms MP3 เครื่องเล่นบนพื้นที่ทำงานแอพฯ(.อข่ายส่วนเฟรมเวิร์ก 4.7.2)นั้นคือการใช้ ElementHost ไปยังเครื่องห MediaElement ควบคุมและมี DispatcherTimer จะควบคุมการเล่นกลับ(เช่นกำลังปรับปรุงเป็นแถบเลื่อน).

ทุกอย่างที่ทำงานสบายดีแต่ตอนที่ฉันออกจากแอพฯฉันไป "System.Threading.Tasks.TaskCanceledException: 'A task was canceled.'" ยกเว้น(ฉันสังเกตเห็นมันเดียวตอนที่วิ่งหนีภายใต้ตัวดีบั).

มันไม่มีอะไรแต่เป็นรำและรู้สึกส่วนใหญ่ไม่มีอันตรายแต่ฉันไม่เหมือนข้อยกเว้นที่ฉันไม่เข้าใจ ที่ callstack ไม่ใช่สุดยอดมีประโยชน์:

>   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

นี่คือสิ่งที่เกิดขึ้นเพราะ WPF งานไม่ได้กำจัดเหมาะสมยังไง? ฉันยืนยันของฉัน DispatchTimer คือหยุดใน MainForm_FormClosing แต่บางทีอาจจะมีอะไรบางอย่างที่ฉันต้องทำความสะอาด?

ไม่ใช่ข้อปัญหาแน่นอนโดยน่ารำคาญ

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

คำตอบที่ดีที่สุด

1

นี่เป็นข้อยกเว้นถูกจับเมื่อมี asynchronous วิธีการคือไม่ได้รับอนุญาตให้วิ่งหนีไปให้สมบูรณ์ในคำสั่งนั้นอีก asynchronous วิธีการเดียวกัน CancellationToken สามารถหยุดการประมวลผล gracefully ถ้าต้องการ

คุณสามารถจะไม่สนใจมันอย่างที่มันดูเหมือนว่าจะเป็น uncaught นข้อยกเว้นจากของไลบรารีแบบใช้ร่คุณกำลังใช้. ถ้ามันกวนใจคุณและคุณก็รู้ว่ามันไม่ได้อยู่ในของคุณ codebase คุณสามารถแช่น้ำคนที่ได้รับการยกเว้นนี้คือโดยทั่วไปแล้วไม่คิดว่าการฝึกที่ดี

2021-11-22 00:48:57

นั่นเป็นวิธีที่ดีที่จะเจอซึ่งวิธีการนั่นคือสาเหตุที่ทำให้เกินี้ยกเว้นจะถูกโยนลง? ฉันจะรู้สึกดีกว่านี้ถ้าฉันรู้ว่าซึ่งสมุดคือทำให้มันเกิดขึ้น. ที่ callstack ตอนโยนข้อยกเว้นเวลาไม่มีประโยชน์และบอกว่ามันเป็นโปรแกรปิดเครื่องมันมีมากน้อวิ่งวนเธรดข่าวออกไป
David Airapetyan

คุณอาจจะห่อของคุณรหัสกับจับข้อตกลงนั้นและทำให้เป็นจุดหยุดมันเพื่อดูว่าคุณสามารถหาตัวคนร้ายที่เรียกสแต็ก. น่าเสียดายที่คนใดคนหนึ่งของไลบรารีของคุณได้ถูกจับเป็นข้อยกเว้นแล้วกาทิ้งเป็นใหม่ CancellationException คุณจะไม่ได้เต็มไปด้วประวัติศาสตร์และทางออกที่ดีที่สุดของคุณก็คือต้องเห็นถ้าคุณสามารถนำเข้าแหล่งข่าวของห้องสมุดว่ามันมีอยู่
Chris
0

มันดูเหมือนจะเป็นปัญหาด้วยอข่ายส่วนเฟรมเวิร์ก 4.7.2. ปัญหาและ workaround ถูกระบุไว้ที่นี่: TaskCanceledException ใน ShutDownListener.

ที่ tl 'dr นั่นคือการเพิ่มต่อไปนี้ของแอพconfig ทำให้คนยกเว้นหายไป:

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

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

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

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่