异常信息: System.AccessViolationException 在 Vlc.DotNet.Core.Interops.VlcManager.SetMediaToMediaPlayer(Vlc.DotNet.Core.Interops.VlcMediaPlayerInstance, Vlc.DotNet.Core.Interops.VlcMediaInstance) 在 Vlc.DotNet.Core.VlcMediaPlayer.SetMedia(Vlc.DotNet.Core.VlcMedia) 在 Vlc.DotNet.Forms.VlcControl.Play(System.Uri, System.String[]) 在 KioskAPP.KioskForm+<>c__DisplayClass116_2.<CreateMP3>b__5() 在 System.Threading.Tasks.Task.InnerInvoke() 在 System.Threading.Tasks.Task.Execute() 在 System.Threading.Tasks.Task.ExecutionContextCallback(System.Object) 在 System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean) 在 System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean) 在 System.Threading.Tasks.Task.ExecuteWithThreadLocal(System.Threading.Tasks.Task ByRef) 在 System.Threading.Tasks.Task.ExecuteEntry(Boolean) 在 System.Threading.Tasks.Task.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem() 在 System.Threading.ThreadPoolWorkQueue.Dispatch() 在 System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()
程序代码:
private void CreateMP3(string playUrl = "") { L.Info("CreateMP3 start"); this.Invoke(new System.Action<object>(delegate { try { if (pnlVlc.Controls.Count > 1){
(pnlVlc.Controls[1] as VlcControl).Dispose();
} L.Info("CreateMP3:播放波普"); VlcControl vlcMP3 = new VlcPlayer().CreateVlc(); vlcMP3.EndReached += (ev, ek) => { Task.Run(() => { try { string videoPath = string.Format(localPath + "Music\\Shockwave{0}.mp4", 1); L.Info("MP3波普:"+videoPath); //循环播放 vlcMP3.Play(new Uri(videoPath)); } catch (Exception ex) { L.Error(string.Format("----MP3 Play Error:{0}----", ex.Message)); L.Error("----MP3 Play Error----", ex); } }); }; vlcMP3.Name = "vlcMP3"; vlcPlayer.Visible = false; pnlVlc.Controls.Add(vlcMP3); vlcMP3.Play(new Uri(localPath + "Music\\Shockwave1.mp4")); } catch (Exception ex) { L.Error(string.Format("----创建MP3异常:{0}", ex.Message)); } }), 1); }
main里的全局异常捕获也没起作用
//处理UI线程异常 Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException); static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e) { string str = GetExceptionMsg(e.Exception, e.ToString()); L.Error(str); }
去掉Task.Run试试
这个是偶尔出现,比较蛋疼
try { var task = Task.Run(() => { string videoPath = string.Concat(localPath + "Music\\Shockwave1.mp4"); vlcMP3.Play(new Uri(videoPath)); }) .ContinueWith((t) => { L.Error("----MP3 Play Error----", t.Exception); },TaskContinuationOptions.OnlyOnFaulted); } catch (Exception ex) { L.Error("CreateMP3:播放波普{0}",ex); }
之前也写过vlc播放器,用C#写的,老是报内存溢出的问题,搞了好久终于好了
请问是怎么修复的?我这也遇到了溢出的问题