zoukankan      html  css  js  c++  java
  • 播放器02:顺序播放,用到了InvokeRequired 属性和委托(Delegate)的BeginInvoke方法

    初学C#记录历程,记录心情。

    UI:

    View Code
      1                     using System;
      2                     using System.Collections.Generic;
      3                     using System.ComponentModel;
      4                     using System.Data;
      5                     using System.Drawing;
      6                     using System.Linq;
      7                     using System.Text;
      8                     using System.Windows.Forms;
      9                     using System.Threading;
     10 
     11                     namespace OrderPlay
     12                     {
     13                         public partial class myAudioPlayer : Form
     14                         {
     15 
     16                             private bool close = false;// 关闭窗口标志位
     17                             private bool running = false;//线程结束标志位
     18                             protected List<string> playList = new List<string>();  //定义一个list来保存加进到listbox里面的文件
     19 
     20                              private void SaveFiles()
     21                             {
     22                                 foreach (var fileName in openFileDialog.FileNames)
     23                                 {
     24                                     if (playList.Contains(fileName) == true)          //不加重复的   
     25                                     {
     26                                         continue;
     27                                     }
     28                                     else
     29                                     {
     30                                         playList.Add(fileName);          //保存原始文件到playList
     31                                         lstPlayer.Items.Add(DeletePath(fileName));      //添加文件到listbox
     32                                     }
     33                                 }
     34                             }
     35 
     36 
     37               
     38                             public myAudioPlayer()
     39                             {
     40                                 InitializeComponent();
     41                                 mediaPlayer.uiMode = "Full";
     42                             }
     43                                                 
     44        
     45                             //双击播放列表里面的文件,播放
     46                             private void lstPlayer_MouseDoubleClick(object sender, MouseEventArgs e)
     47                             {
     48                               mediaPlayer.URL = playList[lstPlayer.SelectedIndex];
     49                               
     50                             }
     51 
     52                             private void orderPlayToolStripMenuItem_Click(object sender, EventArgs e)
     53                             {
     54                                 if (!running)
     55                                 {
     56                                     // 启动另一线程检测 mediaPlayer 的播放状态,循环播放列表里的歌曲
     57                                     running = true;
     58                                     Thread thread = new Thread(new ThreadStart(this.CheckStatus));
     59                                     thread.IsBackground = false;   //设置后台线程为false
     60                                     thread.Start();
     61                                 }
     62                                 if (lstPlayer.Items.Count == 0)
     63                                 {
     64                                     MessageBox.Show("No file in List");
     65                                 }
     66                             }
     67 
     68                             //检查线程状态,顺序播放
     69                             private void CheckStatus()
     70                             {
     71                                 while (running && !close)
     72                                 {
     73                                     try
     74                                     {
     75                                         if (mediaPlayer.playState == WMPLib.WMPPlayState.wmppsStopped && lstPlayer.Items.Count > 0)  //是否播放停止且列表有文件
     76                                         {
     77                                             if (lstPlayer.InvokeRequired)           //是否跨线程
     78                                             {
     79                                                 lstPlayer.BeginInvoke(new MethodInvoker(() =>//BeginInvoke方法可以使用线程异步地执行委托所指向的方法
     80                                                 {
     81                                                     SetSelectedIndex();
     82                                                 }), null);
     83                                             }
     84                                             else
     85                                             {
     86                                                 SetSelectedIndex();
     87                                             }
     88 
     89                                         }
     90                                                                          
     91                                     }
     92                                     catch (Exception ex)
     93                                     {
     94                                         MessageBox.Show("出错" + ex.ToString());
     95                                     }
     96                                     System.Threading.Thread.Sleep(1000);//状态检测延时1秒,加快打开歌曲的速度
     97                                 }
     98                                 running = false;
     99                                                             
    100 
    101                             }
    102 
    103                             private void SetSelectedIndex()
    104                             {
    105                                 if (lstPlayer.SelectedIndex + 1 > lstPlayer.Items.Count - 1)  //是否到最下面
    106                                 {
    107                                     lstPlayer.SelectedIndex = 0;      //回到第一个
    108                                 }
    109                                 else
    110                                 {
    111                                     lstPlayer.SelectedIndex = lstPlayer.SelectedIndex + 1;   //下移
    112                                 }
    113                                 mediaPlayer.URL = playList[lstPlayer.SelectedIndex];   //播放
    114             
    115                             }
    116 
    117                             private void threadOrderPlay_FormClosing(object sender, FormClosingEventArgs e)
    118                             {
    119                                 this.close = true;
    120                             }
    121 
    122                        
    123                        
    124 
    125 
    126 
    127 
    128                         }
    129                     }
  • 相关阅读:
    SQL Azure (17) SQL Azure V12
    Microsoft Azure News(5) Azure新DV2系列虚拟机上线
    Azure Redis Cache (3) 在Windows 环境下使用Redis Benchmark
    Azure PowerShell (11) 使用自定义虚拟机镜像模板,创建Azure虚拟机并绑定公网IP(VIP)和内网IP(DIP)
    Windows Azure Virtual Machine (31) 迁移Azure虚拟机
    Windows Azure Web Site (16) Azure Web Site HTTPS
    Azure China (12) 域名备案问题
    一分钟快速入门openstack
    管理员必备的Linux系统监控工具
    Keepalived+Nginx实现高可用和双主节点负载均衡
  • 原文地址:https://www.cnblogs.com/bloomalone/p/2823660.html
Copyright © 2011-2022 走看看