程序示例精选

C#+WPF多线程视频摄像头播放器监控

如需安装运行环境或远程调试,见文章底部个人QQ名片,由专业技术人员远程协助!

前言

这篇博客针对<<C#+WPF多线程视频摄像头播放器监控>>编写代码,代码整洁,规则,易读。 学习与应用推荐首选。

为什么需要用多线程,多线程是远程视频采集播放主要算法功能,防止卡顿,黑屏,蓝屏,花屏问题,所以远程视频采集播放多线程算法功能是必须采用的一种方法。


文章目录

一、所需工具软件

二、使用步骤

        1. 引入库

        2. 代码实现

        3. 运行结果

三、在线协助

一、所需工具软件

1. VS,WPF

2. OpenCV

二、使用步骤

1.引入库

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
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.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;using System.Diagnostics;
using System.IO;
using System.Threading;
using System.Windows.Threading;
using System.Timers;using System.ComponentModel;

2. 代码实现

代码如下:

public class Thread1Class : System.Windows.Window
{// 第一个线程要执行的代码//多线程1//opencv变量1public Mat frameMatT1;private volatile bool stopFlag = false;private ManualResetEvent pauseSignal = new ManualResetEvent(true);public void Thread1Function(){try{// 在这里编写第一个线程要执行的代码Console.WriteLine("capture0");// 在这里编写要在UI线程上执行的操作VideoCapture capture1 = new VideoCapture();capture1.Open("aa.mp4", VideoCaptureAPIs.ANY);Console.WriteLine("capture00");if (capture1.IsOpened()){Console.WriteLine("capture1");// 循环读取视频帧并在图像控件中显示while (!stopFlag){Mat frameMat1 = capture1.RetrieveMat();if (!frameMat1.Empty()){//Console.WriteLine("hello111222");}frameMatT1 = new Mat();frameMat1.CopyTo(frameMatT1);// 暂停线程pauseSignal.WaitOne();}// 释放资源capture1.Release();}}catch (ThreadAbortException ex){// 线程已被终止}}}public class Thread2Class : System.Windows.Window
{// 第二个线程要执行的代码public void Thread2Function(){// 在这里编写第二个线程要执行的代码Console.WriteLine("Thread2Function");}
}namespace WpfApp1
{/// <summary>/// MainWindow.xaml 的交互逻辑/// </summary>/// public partial class MainWindow : System.Windows.Window{private Thread1Class thread1Object; //线程1定义private Thread2Class thread2Object;  //线程2定义private DispatcherTimer _timer11; //计时器定义private int _count = 0;     // 计时器已经运行的秒数private bool _isPaused = false;    // 标识计时器是否处于暂停状态public MainWindow(){InitializeComponent();timer11Init11();}private void timer11Init11(){// 创建一个新的计时器对象_timer11 = new DispatcherTimer();// 设置计时器间隔时间为1秒_timer11.Interval = TimeSpan.FromSeconds(0.2);// 订阅Tick事件,并将其处理程序设置为我们想要自动执行的函数_timer11.Tick += new EventHandler(video_display11);}private void timerStart11(object sender, RoutedEventArgs e){try{string buttonText = userPC.Content.ToString();if (buttonText == "开始"){// 启动计时器_timer11.Start();Console.WriteLine("_timerStart");userPC.Content = "暂停";}if (buttonText == "暂停"){// 如果计时器正在运行,则暂停计时器if (_timer11.IsEnabled){_timer11.Stop();_isPaused = true;}userPC.Content = "恢复";}if (buttonText == "恢复"){// 如果计时器处于暂停状态,则恢复计时器if (_isPaused){_timer11.Start();_isPaused = false;}userPC.Content = "暂停";}}catch (ThreadAbortException ex){// 线程已被终止}}private void myPauseButton_Click(object sender, RoutedEventArgs e){// 如果计时器正在运行,则暂停计时器if (_timer11.IsEnabled){_timer11.Stop();_isPaused = true;}}private void myResumeButton_Click(object sender, RoutedEventArgs e){// 如果计时器处于暂停状态,则恢复计时器if (_isPaused){_timer11.Start();_isPaused = false;}}private void myStopButton_Click(object sender, RoutedEventArgs e){// 停止计时器并重置计时器已运行的秒数_timer11.Stop();_count = 0;timerLabel11.Content = "0";}//链接计时器private void video_display11(object sender, EventArgs e){try{Console.WriteLine("video_display");if (thread1Object != null){if (thread1Object.frameMatT1 != null){Console.WriteLine("video_display0");if (value != null && value.Rows > 0 && value.Cols > 0){}else{Console.WriteLine("video_close ");}}}_count++;timerLabel11.Content = _count.ToString();}catch (ThreadAbortException ex){// 线程已被终止}}private void videoModel_init11(object sender, RoutedEventArgs e){try{string buttonText = model_init11.Content.ToString();if (buttonText == "模型初始化"){thread1Object = new Thread1Class();thread1Object.RunThread();Console.WriteLine("RunThread");model_init11.Content = "暂停模型";}if (buttonText == "暂停模型"){model_init11.Content = "恢复模型";thread1Object.PauseThread();}if (buttonText == "恢复模型"){model_init11.Content = "暂停模型";thread1Object.ResumeThread();}}catch (ThreadAbortException ex){// 线程已被终止}}private void videoModel_Stop11(object sender, RoutedEventArgs e){try{thread1Object.StopThread();}catch (ThreadAbortException ex){// 线程已被终止}}} //class类结束
}  //namespace结束

3. 运行结果

三、在线协助:

如需安装运行环境或远程调试,见文章底部个人 QQ 名片,由专业技术人员远程协助!
1)远程安装运行环境,代码调试
2)Qt, C++, Python入门指导
3)界面美化
4)软件制作

博主推荐文章:python人脸识别统计人数qt窗体-CSDN博客

博主推荐文章:Python Yolov5火焰烟雾识别源码分享-CSDN博客

Python OpenCV识别行人入口进出人数统计_python识别人数-CSDN博客

个人博客主页:alicema1111的博客_CSDN博客-Python,C++,网页领域博主

博主所有文章点这里alicema1111的博客_CSDN博客-Python,C++,网页领域博主

VS+C#+WPF多线程视频摄像头播放器监控相关推荐

  1. android 桌面视频播放器,ZY-Player ,一款跨平台桌面端视频资源播放器

    前段时间为大家整理了一波免费高清的影视站,详见<酷站分享,免费看高清VIP电影>,影视资源站当然要多多益善.除此之外,各种第三方优秀的播放器也可多收藏一些,譬如今天介绍的这款ZY Play ...

  2. YUVPlayer: 基于Android平台的YUV视频原始数据播放器

    基于Android平台的YUV视频原始数据播放器 编译环境 FFmpeg版本: 4.2.2 NDK版本:r17c 运行环境 x86(模拟器) arm64-v8a(64位手机) 功能点 从文件中读取YU ...

  3. html选择本地文件视频并播放器,使HTML5视频播放器播放不同的文件(Make a HTML5 video player play a different file)...

    使HTML5视频播放器播放不同的文件(Make a HTML5 video player play a different file) 在播放视频时,我无法让HTML5播放器播放不同的视频,我尝试更改 ...

  4. 最新哔哩哔哩视频弹幕播放器源码+带后台/亲测无错误

    正文: 最新哔哩哔哩视频弹幕播放器源码+带后台/亲测无错误,此款播放器源码添加及修复了很多功能,且所有源码均本地化,不存在外链的情况,测试环境:PHP7.0+MySQL5.6 安装教程: 1,访问/d ...

  5. vue 背景图 自适应_Vue的自适应视频背景播放器

    vue 背景图 自适应 Vue响应视频背景播放器 (vue-responsive-video-background-player) Play your own videos in background ...

  6. 手把手教你如何在WPF中应用VLC播放器

    WPF中应用VLC播放器 *1. 在WPF的"引用:中点击右键,选择管理NuGet程序包,输入vlc,安装VLC.DOtNet.Wpf包 *2.在VLC官网下载VLC播放器,注意你的项目是3 ...

  7. WPF中应用VLC播放器

    WPF中应用VLC播放器 文章目录 WPF中应用VLC播放器 1. 安装VLC.DOtNet.Wpf包 2.程序中使用 3.源代码 4.VLC GitHub源代码 1. 安装VLC.DOtNet.Wp ...

  8. 2021最新哔哩bilibili视频弹幕播放器带后台版本完整无错修复

    源码介绍: 此款播放器源码添加及修复了很多功能,且所有源码均本地化,不存在外链的情况.站长亲测_测试环境:PHP7.0+MySQL5.6 优化修复功能:1.修复优化播放器播放结束自动下一集代码2.修复 ...

  9. 最新哔哩bilibili视频弹幕播放器源码+完整无错带后台/亲测

    正文: 最新哔哩bilibili视频弹幕播放器源码+完整无错带后台/亲测,此款播放器源码添加及修复了很多功能,且所有源码均本地化,不存在外链的情况,测试环境:PHP7.0+MySQL5.6 播放器跨域 ...

  10. canvas 视频音乐播放器

    canvas 视频音乐播放器 canvas 视频音乐播放器 var play_nor_img_path = 'images/play_btn_n.png'; //播放按钮 正常时 60x60 px v ...

最新文章

  1. 查看 并发请求数及其TCP连接状态
  2. 理解 async/await 的执行
  3. 精品软件 推荐 ACPsoft PDF Converter 免费的多功能 PDF 转换器
  4. n个人选k个c语言_leetcode之第k个缺失的正整数
  5. Java使用ojdbc连接Oracle数据库时不能使用服务名连接的问题
  6. 关于scriptManager与JS代码兼容问题
  7. idea超炫的自定义模板
  8. Spring Security(02)——关于登录
  9. 压测 broken pipe 之类
  10. 机器学习(一)线性模型之岭回归器RidgeRegressor
  11. java ee 结构图,javaee体系结构图
  12. excel 删除大量空白行
  13. python与会计学_财务与会计前沿讲座——“大数据集训”开讲
  14. 让树莓派变身照相机——摄像头控制
  15. 智能在线客服是如何工作的?
  16. Python杀死Excel?众多模块哪家强
  17. 文本分割之垂直投影法基于OpenCV(python)的实现
  18. 笔记本计算机排名2015,2015性价比高的笔记本电脑排行榜
  19. loadrunner入门教程(11)--回放脚本
  20. 运放如何产生三角波信号

热门文章

  1. 微软序列号生成和验证的技术原理!
  2. 转:高效管理需要掌握这六大要素
  3. 用计算机算卷积的规则,信号卷积计算公式与在线计算器_三贝计算网_23bei.com
  4. 37_接口多态的综合案例
  5. 医学图像处理之GDC数据库
  6. 在vue项目中监听电脑网络的状态
  7. 2016 ACOUG ASIA TOUR | 7月,与技术相约在盛夏
  8. 关于FastDDS在C#中使用的简单实例
  9. 正则表达式提取电话号码
  10. Paint.NET 的 PSD 格式支持插件(Photoshop 格式)