using CefSharp.Wpf; using Container.Business; using Container.ChildWindows; using Container.Common; using Container.Model; using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Reflection; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using Vlc.DotNet.Wpf; namespace Container.Win { /// /// ProgControl.xaml 的交互逻辑 /// public partial class ProgControl : UserControl { string outLinePath; App app = ((App)System.Windows.Application.Current); DirectoryInfo vlcLibDirectory; backgroundMaterialInfo backgroundMaterial; string backgroundColor; List components; private Thread th1;//播放屏保的线程 bool isStop = false; BrushConverter converter = new BrushConverter(); List tasks = new List(); List marqueeControlNews = new List(); List clockControls = new List(); List weatherControls = new List(); List imageControls = new List(); List mediaControls = new List(); List chromiumWebBrowsers = new List(); List mediaElements = new List(); List canvasWebBrowsers = new List(); //VlcControl vlcControl1 = new VlcControl(); //VlcControl vlcControl2 = new VlcControl(); List cancellationTokens = new List(); string[] options; public ProgControl() { InitializeComponent(); var currentAssembly = Assembly.GetEntryAssembly(); var currentDirectory = new FileInfo(currentAssembly.Location).DirectoryName; // Default installation path of VideoLAN.LibVLC.Windows //vlcLibDirectory = new DirectoryInfo(currentDirectory); ////初始化配置,指定引用库 //vlcControl1.SourceProvider.CreatePlayer(vlcLibDirectory); ////初始化配置,指定引用库 //vlcControl2.SourceProvider.CreatePlayer(vlcLibDirectory); // options = new string[]{ // "-I", //"dummy", //"--ignore-config", //"--extraintf=logger", //"--verbose=2", //"--fullscreen", //"--network-caching=300", //"--live-caching=300", //"--sout-mux-caching=300", //"--file-caching=300", //"--codec=mediacodec,iomx,all", //"--quiet-synchro", //" --clock-synchro=300", //"--network-synchronisation", //"--cr-average=10000" // }; //options = new string[] { "-I", "dummy", "--network-caching=<300", ":sout=#transcode{vcodec=h264,acodec=mpga,ab=128,channels=2,samplerate=44100" }; //canvas.Children.Add(vlcControl1); //canvas.Children.Add(vlcControl2); } public void LoadProg(double width, double height, backgroundMaterialInfo backgroundmaterial, string backgroundcolor, List componentList) { backgroundMaterial = backgroundmaterial; backgroundColor = backgroundcolor; components = componentList; this.Width = width; this.Height = height; canvas.Width = width; canvas.Height = height; try { outLinePath = AppDomain.CurrentDomain.BaseDirectory + "/OutlineFiles"; if (backgroundMaterial != null) { string fileExtension = string.Empty; if (backgroundMaterial.filePath.Contains("?")) { fileExtension = backgroundMaterial.filePath.Substring(backgroundMaterial.filePath.LastIndexOf("."), backgroundMaterial.filePath.LastIndexOf("?") - backgroundMaterial.filePath.LastIndexOf(".")).ToLower(); } else { fileExtension = backgroundMaterial.filePath.Substring(backgroundMaterial.filePath.LastIndexOf(".")).ToLower(); } string url = outLinePath + "/Main/" + backgroundMaterial.fileHash + fileExtension; if (File.Exists(url)) { Image image = new Image();//新建图片对象 image.Source = new BitmapImage(new Uri(url));//读取图片 ImageBrush ib = new ImageBrush();//新建图片对象 ib.ImageSource = image.Source;//赋值为背景图片 canvas.Background = ib;//将图片对象赋值给Canvas的Background } } else if (!string.IsNullOrEmpty(backgroundColor)) { Color color = (Color)ColorConverter.ConvertFromString(backgroundColor); canvas.Background = new SolidColorBrush(color); } int vlcCount = 0; isStop = false; foreach (var item in components) { if ((item.materials == null || item.materials.Count == 0) && (item.typeCode == "text" || item.typeCode == "image" || item.typeCode == "video"||item.typeCode== "audio" || item.typeCode == "html" || item.typeCode == "url")) { continue; } if (item.typeCode == "image") { Image image = new Image(); image.Width = item.width; image.Height = item.height; imageControls.Add(image); canvas.Children.Add(image); Canvas.SetLeft(image, item.offsetX); Canvas.SetZIndex(image, item.zIndex); Canvas.SetTop(image, item.offsetY); image.Stretch = Stretch.Fill; PlayImage(image, item.materials, item.config); } if (item.typeCode == "video"&& item.materials.Count>0) { if (item.materials.Count > 1) { MediaElement media = new MediaElement(); media.LoadedBehavior = MediaState.Manual; Canvas canvasM = new Canvas(); canvasM.Width = item.width; canvasM.Height = item.height; canvasM.Background = Brushes.Black; media.Width = item.width; media.Height = item.height; media.Stretch = Stretch.Fill; canvasM.Children.Add(media); Canvas.SetLeft(canvasM, item.offsetX); Canvas.SetZIndex(canvasM, item.zIndex); Canvas.SetTop(canvasM, item.offsetY); canvas.Children.Add(canvasM); canvasWebBrowsers.Add(canvasM); mediaElements.Add(media); PlayVideo(media, item.materials, item.config, 1); media.Volume = 1; } else if (item.materials.Count == 1) { string fileExtension = string.Empty; string url = string.Empty; if (item.materials[0].fileUrl.Contains("?")) { fileExtension = item.materials[0].fileUrl.Substring(item.materials[0].fileUrl.LastIndexOf("."), item.materials[0].fileUrl.LastIndexOf("?") - item.materials[0].fileUrl.LastIndexOf(".")).ToLower(); } else { fileExtension = item.materials[0].fileUrl.Substring(item.materials[0].fileUrl.LastIndexOf(".")).ToLower(); } url = outLinePath + "/Main/" + item.materials[0].fileHash + fileExtension; MediaElement media = new MediaElement(); media.MediaEnded += new RoutedEventHandler((send, e) => { media.Position = new TimeSpan(0,0,0,0,100); }); media.LoadedBehavior = MediaState.Manual; media.Stretch = Stretch.Fill; media.Source = new Uri(url); Canvas canvasM = new Canvas(); canvasM.Width = item.width; canvasM.Height = item.height; canvasM.Background = Brushes.Transparent; media.Width = item.width; media.Height = item.height; canvasM.Children.Add(media); Canvas.SetLeft(canvasM, item.offsetX); Canvas.SetZIndex(canvasM, item.zIndex); Canvas.SetTop(canvasM, item.offsetY); canvas.Children.Add(canvasM); canvasWebBrowsers.Add(canvasM); mediaElements.Add(media); media.Play(); //PlayVideo(media, item.materials, item.config, 1); media.Volume = 1; } //else if (item.materials.Count == 1) //{ // string fileExtension = string.Empty; // string url = string.Empty; // if (item.materials[0].fileUrl.Contains("?")) // { // fileExtension = item.materials[0].fileUrl.Substring(item.materials[0].fileUrl.LastIndexOf("."), item.materials[0].fileUrl.LastIndexOf("?") - item.materials[0].fileUrl.LastIndexOf(".")).ToLower(); // } // else // { // fileExtension = item.materials[0].fileUrl.Substring(item.materials[0].fileUrl.LastIndexOf(".")).ToLower(); // } // url = outLinePath + "/Main/" + item.materials[0].fileHash + fileExtension; // MediaElement media = new MediaElement(); // media.LoadedBehavior = MediaState.Manual; // media.Volume = 1; // EventTrigger eventTrigger = new EventTrigger(); // eventTrigger.RoutedEvent = MediaElement.LoadedEvent; // eventTrigger.SourceName = media.Name; // BeginStoryboard begin = new BeginStoryboard(); // Storyboard storyboard = new Storyboard(); // MediaTimeline timeline = new MediaTimeline(); // //timeline.FillBehavior = FillBehavior.Stop; // timeline.Source = new Uri(url); // timeline.RepeatBehavior = RepeatBehavior.Forever; // Storyboard.SetTarget(timeline, media); // storyboard.Children.Add(timeline); // begin.Storyboard = storyboard; // eventTrigger.Actions.Add(begin); // media.Triggers.Add(eventTrigger); // Canvas canvasM = new Canvas(); // canvasM.Width = item.width; // canvasM.Height = item.height; // canvasM.Background = Brushes.Transparent; // media.Width = item.width; // media.Height = item.height; // canvasM.Children.Add(media); // Canvas.SetLeft(canvasM, item.offsetX); // Canvas.SetZIndex(canvasM, item.zIndex); // Canvas.SetTop(canvasM, item.offsetY); // canvas.Children.Add(canvasM); // canvasWebBrowsers.Add(canvasM); // mediaElements.Add(media); //} //vlcCount++; //if (vlcCount == 1) //{ // canvasM1.Width= item.width; // canvasM1.Height = item.height; // media1.Width = item.width; // media1.Height = item.height; // Canvas.SetLeft(canvasM1, item.offsetX); // Canvas.SetZIndex(canvasM1, item.zIndex); // Canvas.SetTop(canvasM1, item.offsetY); // PlayVideo(media1, item.materials, item.config, 1); //} //else //{ // canvasM2.Width = item.width; // canvasM2.Height = item.height; // media2.Width = item.width; // media2.Height = item.height; // Canvas.SetLeft(canvasM2, item.offsetX); // Canvas.SetZIndex(canvasM2, item.zIndex); // Canvas.SetTop(canvasM2, item.offsetY); // PlayVideo(media2, item.materials, item.config, 2); //} } if (item.typeCode == "text" && item.materials != null && item.materials.Count > 0) { var textBackgroundColor = item.config.Value("backgroundColor"); var textBackgroundOpacity = item.config.Value("backgroundOpacity"); var textFontColor = item.config.Value("fontColor"); var textFontSize = item.config.Value("fontSize"); var textFontStyle = item.config.Value("fontStyle"); var textAnimationSpeed = item.config.Value("animationSpeed"); string fileExtension = string.Empty; string url = string.Empty; if (item.materials[0].fileUrl.Contains("?")) { fileExtension = item.materials[0].fileUrl.Substring(item.materials[0].fileUrl.LastIndexOf("."), item.materials[0].fileUrl.LastIndexOf("?") - item.materials[0].fileUrl.LastIndexOf(".")).ToLower(); } else { fileExtension = item.materials[0].fileUrl.Substring(item.materials[0].fileUrl.LastIndexOf(".")).ToLower(); } url = outLinePath + "/Main/" + item.materials[0].fileHash + fileExtension; string textContent = DownLoadMethod.ReadContext(url); textContent = textContent.Replace("\r\n", " "); MarqueeControlNew marqueeControlNew = new MarqueeControlNew(); marqueeControlNew.Load(textContent, item.width, item.height, textFontSize, textBackgroundColor, textBackgroundOpacity, textFontColor, textFontStyle, textAnimationSpeed); canvas.Children.Add(marqueeControlNew); marqueeControlNews.Add(marqueeControlNew); Canvas.SetLeft(marqueeControlNew, item.offsetX); Canvas.SetZIndex(marqueeControlNew, item.zIndex); Canvas.SetTop(marqueeControlNew, item.offsetY); } if (item.typeCode == "clock") { var backgroundColor = item.config.Value("backgroundColor"); var fontColor = item.config.Value("fontColor"); var style = item.config.Value("style"); ClockControl clock = new ClockControl(); clock.BindClock(style.Value, item.width, item.height, backgroundColor, fontColor); canvas.Children.Add(clock); clockControls.Add(clock); Canvas.SetLeft(clock, item.offsetX); Canvas.SetZIndex(clock, item.zIndex); Canvas.SetTop(clock, item.offsetY); } if (item.typeCode == "weather") { var backgroundColor = item.config.Value("backgroundColor"); var fontColor = item.config.Value("fontColor"); var style = item.config.Value("style"); var city = item.config.Value("cityName"); if (string.IsNullOrEmpty(city)) { city = app.defaultCity; } if (!string.IsNullOrEmpty(city)) { WeatherControl weather = new WeatherControl(); weather.LoadWeather(city, style.Value, item.width, item.height, backgroundColor, fontColor); canvas.Children.Add(weather); weatherControls.Add(weather); Canvas.SetLeft(weather, item.offsetX); Canvas.SetZIndex(weather, item.zIndex); Canvas.SetTop(weather, item.offsetY); } } if (item.typeCode == "audio" && item.materials != null && item.materials.Count > 0) { MediaPlayer media = new MediaPlayer(); string fileExtension = string.Empty; string url = string.Empty; if (item.materials[0].fileUrl.Contains("?")) { fileExtension = item.materials[0].fileUrl.Substring(item.materials[0].fileUrl.LastIndexOf("."), item.materials[0].fileUrl.LastIndexOf("?") - item.materials[0].fileUrl.LastIndexOf(".")).ToLower(); } else { fileExtension = item.materials[0].fileUrl.Substring(item.materials[0].fileUrl.LastIndexOf(".")).ToLower(); } url = outLinePath + "/Main/" + item.materials[0].fileHash + fileExtension; media.Open(new Uri(url, UriKind.Relative)); media.MediaEnded += (sender, e) => {//播放结束后 又重新播放 media.Position = new TimeSpan(0); }; media.Play(); mediaControls.Add(media); } if (item.typeCode == "html" && item.materials != null && item.materials.Count > 0) { string fileExtension = string.Empty; string url = string.Empty; if (item.materials[0].fileUrl.Contains("?")) { fileExtension = item.materials[0].fileUrl.Substring(item.materials[0].fileUrl.LastIndexOf("."), item.materials[0].fileUrl.LastIndexOf("?") - item.materials[0].fileUrl.LastIndexOf(".")).ToLower(); } else { fileExtension = item.materials[0].fileUrl.Substring(item.materials[0].fileUrl.LastIndexOf(".")).ToLower(); } url = outLinePath + "/Main/" + item.materials[0].fileHash + fileExtension; ChromiumWebBrowser webBrowser = new ChromiumWebBrowser(); webBrowser.Width = item.width; webBrowser.Height = item.height; webBrowser.Address = url.Replace(@"/", @"\").Replace(@"\\",@"\") ; //webBrowser.GetBrowser().Reload(); //webBrowser.Address = "file:///D:/360MoveData/Users/jiaxl/Desktop/Websocket.html"; webBrowser.Background = Brushes.Black; Canvas canvas1 = new Canvas(); canvas1.Width = item.width; canvas1.Height = item.height; canvas1.Background = Brushes.White; canvas1.Children.Add(webBrowser); //webBrowser.Load(url); canvas.Children.Add(canvas1); canvasWebBrowsers.Add(canvas1); chromiumWebBrowsers.Add(webBrowser); Canvas.SetLeft(canvas1, item.offsetX); Canvas.SetZIndex(canvas1, item.zIndex); Canvas.SetTop(canvas1, item.offsetY); } if (item.typeCode == "url" && item.materials != null && item.materials.Count > 0 && item.materials[0].mediaInfo != null && !string.IsNullOrEmpty(item.materials[0].mediaInfo.url)) { ChromiumWebBrowser webBrowser = new ChromiumWebBrowser(); webBrowser.Width = item.width; webBrowser.Height = item.height; webBrowser.Address = item.materials[0].mediaInfo.url; webBrowser.Background = Brushes.Black; Canvas canvas1 = new Canvas(); canvas1.Width = item.width; canvas1.Height = item.height; canvas1.Background = Brushes.White; canvas1.Children.Add(webBrowser); //webBrowser.Load(url); canvas.Children.Add(canvas1); canvasWebBrowsers.Add(canvas1); chromiumWebBrowsers.Add(webBrowser); Canvas.SetLeft(canvas1, item.offsetX); Canvas.SetZIndex(canvas1, item.zIndex); Canvas.SetTop(canvas1, item.offsetY); } } } catch (Exception ex) { Class_Log _Log = new Class_Log(); _Log.WriteLogFile(ex.ToString()); } } //private void PlayImage(Image image, List materials, JObject config) //{ // CancellationTokenSource source1 = new CancellationTokenSource(); // cancellationTokens.Add(source1); // CancellationToken token = source1.Token; // TaskFactory factory = new TaskFactory(token); // Task tsk1 = factory.StartNew(() => // { // var curPlayIndex = 0; // var transitionPeriod = config.Value("transitionPeriod"); // var transition = config.Value("transition"); // string fileExtension = string.Empty; // string url = string.Empty; // DateTime? curDate = null; // while (!isStop) // { // if (token.IsCancellationRequested) // { // //isStop = true; // // 释放资源操作等等... // break; // } // if (!curDate.HasValue||curDate.Value.AddMilliseconds(transitionPeriod * 1000) <= DateTime.Now) // { // if (materials[curPlayIndex].fileUrl.Contains("?")) // { // fileExtension = materials[curPlayIndex].fileUrl.Substring(materials[curPlayIndex].fileUrl.LastIndexOf("."), materials[curPlayIndex].fileUrl.LastIndexOf("?") - materials[curPlayIndex].fileUrl.LastIndexOf(".")).ToLower(); // } // else // { // fileExtension = materials[curPlayIndex].fileUrl.Substring(materials[curPlayIndex].fileUrl.LastIndexOf(".")).ToLower(); // } // curDate = DateTime.Now; // url = outLinePath + "/Main/" + materials[curPlayIndex].fileHash + fileExtension; // BindImage(image, url, transition); // curPlayIndex++; // if (curPlayIndex >= materials.Count) // { // curPlayIndex = 0; // } // } // else // { // Thread.Sleep(1); // } // } // }); // //var thImage = new Thread(new ThreadStart(async () => // //{ // // var curPlayIndex = 0; // // var transitionPeriod = config.Value("transitionPeriod"); // // var transition = config.Value("transition"); // // string fileExtension = string.Empty; // // string url = string.Empty; // // while (!isStop) // // { // // if (materials[curPlayIndex].fileUrl.Contains("?")) // // { // // fileExtension = materials[curPlayIndex].fileUrl.Substring(materials[curPlayIndex].fileUrl.LastIndexOf("."), materials[curPlayIndex].fileUrl.LastIndexOf("?") - materials[curPlayIndex].fileUrl.LastIndexOf(".")).ToLower(); // // } // // else // // { // // fileExtension = materials[curPlayIndex].fileUrl.Substring(materials[curPlayIndex].fileUrl.LastIndexOf(".")).ToLower(); // // } // // url = outLinePath + "/Main/" + materials[curPlayIndex].fileHash + fileExtension; // // BindImage(image, url, transition); // // curPlayIndex++; // // if (curPlayIndex >= materials.Count) // // { // // curPlayIndex = 0; // // } // // var taskProg = Task.Delay(transitionPeriod * 1000); // // tasks.Add(taskProg); // // await taskProg; // // if (taskProg != null && taskProg.Status != TaskStatus.Canceled) // // { // // taskProg.Dispose(); // // tasks.Remove(taskProg); // // } // // } // //})); // //thImage.IsBackground = true; // //thImage.Start(); //} private void PlayImage(Image image, List materials, JObject config) { CancellationTokenSource source1 = new CancellationTokenSource(); cancellationTokens.Add(source1); CancellationToken token = source1.Token; TaskFactory factory = new TaskFactory(token); Task tsk1 = factory.StartNew(async () => { var curPlayIndex = 0; var transitionPeriod = config.Value("transitionPeriod"); var transition = config.Value("transition"); string fileExtension = string.Empty; string url = string.Empty; DateTime? curDate = null; while (!isStop) { if (token.IsCancellationRequested) { //isStop = true; // 释放资源操作等等... break; } //if (!curDate.HasValue || curDate.Value.AddMilliseconds(transitionPeriod * 1000) <= DateTime.Now) //{ if (materials[curPlayIndex].fileUrl.Contains("?")) { fileExtension = materials[curPlayIndex].fileUrl.Substring(materials[curPlayIndex].fileUrl.LastIndexOf("."), materials[curPlayIndex].fileUrl.LastIndexOf("?") - materials[curPlayIndex].fileUrl.LastIndexOf(".")).ToLower(); } else { fileExtension = materials[curPlayIndex].fileUrl.Substring(materials[curPlayIndex].fileUrl.LastIndexOf(".")).ToLower(); } curDate = DateTime.Now; url = outLinePath + "/Main/" + materials[curPlayIndex].fileHash + fileExtension; BindImage(image, url, transition); curPlayIndex++; if (curPlayIndex >= materials.Count) { curPlayIndex = 0; } if (token.IsCancellationRequested) { //isStop = true; // 释放资源操作等等... break; } else { await Task.Delay(transitionPeriod * 1000, token); } //} //else //{ // Thread.Sleep(1); //} } }); } private void BindImage(Image image, string img, string transition) { Action action = new Action(()=> { image.Dispatcher.Invoke(new Action(() => { if (img.ToLower().EndsWith(".gif")) { //FileStream stream = new FileStream(img, FileMode.Open, FileAccess.Read); //XamlAnimatedGif.AnimationBehavior.SetSourceStream(image, stream); //FileStream s = new FileStream(outLinePath + "/Main/" + ucList[app.currentIndex].sourceId + fileExtension, FileMode.Open, FileAccess.Read); XamlAnimatedGif.AnimationBehavior.SetSourceUri(image, new Uri(img)); XamlAnimatedGif.AnimationBehavior.SetRepeatBehavior(image, RepeatBehavior.Forever); XamlAnimatedGif.AnimationBehavior.SetAutoStart(image, true); } else { image.Source = new BitmapImage(new Uri(img)); } })); }); action.BeginInvoke(null,null); } private void PlayVideo(MediaElement media, List materials, JObject config,int type) { Action action = new Action(async delegate { try { Class_Log log = new Class_Log(); //if (th1 == null) //{ CancellationTokenSource source1 = new CancellationTokenSource(); cancellationTokens.Add(source1); CancellationToken token = source1.Token; TaskFactory factory = new TaskFactory(token); Task tsk1 = factory.StartNew(async () => { var curPlayIndex = 0; string fileExtension = string.Empty; string url = string.Empty; var curDate = DateTime.Now; var duration = 0; while (!isStop) { if (token.IsCancellationRequested) { //isStop = true; // 释放资源操作等等... break; } //log.WriteLogFile("-----curDate" + curDate.ToString("yyyy-MM-dd HH:mm:ss") + " url=" + url + " duration=" + duration); //if (curDate.AddMilliseconds(duration) <= DateTime.Now) //{ if (materials[curPlayIndex].fileUrl.Contains("?")) { fileExtension = materials[curPlayIndex].fileUrl.Substring(materials[curPlayIndex].fileUrl.LastIndexOf("."), materials[curPlayIndex].fileUrl.LastIndexOf("?") - materials[curPlayIndex].fileUrl.LastIndexOf(".")).ToLower(); } else { fileExtension = materials[curPlayIndex].fileUrl.Substring(materials[curPlayIndex].fileUrl.LastIndexOf(".")).ToLower(); } url = outLinePath + "/Main/" + materials[curPlayIndex].fileHash + fileExtension; duration = materials[curPlayIndex].duration; //log.WriteLogFile("curDate" + curDate.ToString("yyyy-MM-dd HH:mm:ss") + " url=" + url + " duration=" + duration); curDate = DateTime.Now; StopVideo(media); StartVideo(media, url); curPlayIndex++; if (curPlayIndex >= materials.Count) { curPlayIndex = 0; } //var taskProg = Task.Delay(duration); //tasks.Add(taskProg); //await taskProg; //if (taskProg != null && taskProg.Status != TaskStatus.Canceled) //{ // taskProg.Dispose(); // tasks.Remove(taskProg); //} //if (token.IsCancellationRequested) //{ // //isStop = true; // // 释放资源操作等等... // break; //} //else //{ await Task.Delay(duration, token); // } //} //else //{ // Thread.Sleep(1); //} //Thread.Sleep(duration); } }); //var thVideo = new Thread(new ThreadStart(async () => // { // var curPlayIndex = 0; // string fileExtension = string.Empty; // string url = string.Empty; // while (!isStop) // { // if (materials[curPlayIndex].fileUrl.Contains("?")) // { // fileExtension = materials[curPlayIndex].fileUrl.Substring(materials[curPlayIndex].fileUrl.LastIndexOf("."), materials[curPlayIndex].fileUrl.LastIndexOf("?") - materials[curPlayIndex].fileUrl.LastIndexOf(".")).ToLower(); // } // else // { // fileExtension = materials[curPlayIndex].fileUrl.Substring(materials[curPlayIndex].fileUrl.LastIndexOf(".")).ToLower(); // } // url = outLinePath + "/Main/" + materials[curPlayIndex].fileHash + fileExtension; // int duration = materials[curPlayIndex].duration; // StartVideo(vlcControl, url); // curPlayIndex++; // if (curPlayIndex >= materials.Count) // { // curPlayIndex = 0; // } // var taskProg = Task.Delay(duration); // tasks.Add(taskProg); // await taskProg; // if (taskProg != null && taskProg.Status != TaskStatus.Canceled) // { // taskProg.Dispose(); // tasks.Remove(taskProg); // } // //Thread.Sleep(duration); // } // })); //thVideo.IsBackground = true; //thVideo.Start(); //} } catch (Exception ex) { Class_Log log = new Class_Log(); log.WriteLogFile(ex.ToString(), "WindowViewErrorlog"); } }); action.BeginInvoke(null, null); } private void StartVideo(MediaElement media, string videoPath) { try { media.Dispatcher.Invoke(new Action(() => { media.Source = new Uri(videoPath); media.Play(); })); //vlcControl.SourceProvider.MediaPlayer.Play(new Uri(videoPath)); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void StopVideo(MediaElement media) { try { media.Dispatcher.Invoke(new Action(() => { media.Stop(); })); //if (vlcControl.SourceProvider.MediaPlayer.IsPlaying()) //{ // vlcControl.SourceProvider.MediaPlayer.Pause(); //} } catch (Exception e) { MessageBox.Show(e.Message); } } private async void UserControl_Loaded(object sender, RoutedEventArgs e) { } public void Dispose() { try { isStop = true; foreach (var item in tasks) { if (item != null && (item.IsCanceled || item.IsCompleted || item.IsFaulted)) { item.Dispose(); } } tasks.Clear(); foreach (var item in marqueeControlNews) { item.Dispose(); canvas.Children.Remove(item); } marqueeControlNews.Clear(); foreach (var item in clockControls) { item.Dispose(); canvas.Children.Remove(item); } clockControls.Clear(); foreach (var item in weatherControls) { item.Dispose(); canvas.Children.Remove(item); } weatherControls.Clear(); foreach (var item in cancellationTokens) { item.Cancel(); } cancellationTokens.Clear(); foreach (var item in mediaElements) { item.Stop(); } mediaElements.Clear(); foreach (var item in imageControls) { canvas.Children.Remove(item); } imageControls.Clear(); foreach (var item in mediaControls) { item.Stop(); item.Close(); } mediaControls.Clear(); foreach (var item in chromiumWebBrowsers) { item.Dispose(); canvas.Children.Remove(item); } chromiumWebBrowsers.Clear(); foreach (var item in canvasWebBrowsers) { canvas.Children.Remove(item); } canvasWebBrowsers.Clear(); } catch (Exception e) { Class_Log _Log = new Class_Log(); _Log.WriteLogFile(e.ToString(), "prog"); } } } }