C#委托和事件处理窗体间通信

前几天做音悦台的解析,希望可以按照列表自动播放下一条首音乐,很早之前做法是定义一个第三方的类,如果主窗体播放结束就设置这个第三方类里的一个静态的标志位,让它表示为播放完成了,然后在这个解析窗口里用一个定时器不断的查询这个第三方类里的标志位,做出响应。这个样可以达到目的,但效率是很低的,事件驱动的写法是比较主流的。

《C#委托和事件处理窗体间通信》
子窗口即解析音悦台所在窗口:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
namespace TelePlayer
{
    public delegate void InformHandle();//委托,主窗体给子窗体传递播放完成事件
    public partial class FormParseStream : Form
    {
         private void FormParseStream_Load(object sender, EventArgs e)
        {
           Form1.EatOver += new InformHandle(AxPlayerEnd);//订阅播放结束事件
        }
        private void AxPlayerEnd()
        {
            //此处写自动播放下一首的相关处理代码
        }
    }
}

主窗口即AP播放控件所在窗口:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
namespace TelePlayer
{
    public partial class Form1 : Form
    {
        public static event InformHandle EatOver;//定义一个事件,用于传递播放完成事件
        public void OnEating()//触发播放完成相关事件
        {
            if (EatOver != null)
            {
                EatOver();
            }
        }
         private void axPlayer1_OnStateChanged(object sender, AxAPlayer3Lib._IPlayerEvents_OnStateChangedEvent e)
        {
           //这个是AP播放状态改变事件,官方接口;此处自行做个判断,在播放正常结束需要触发事件的位置写入以下函数;
           OnEating();
        }
    }
}

对委托和事件理解的还不够透彻,这样做可能还不是最优的。
站长自己现在并没有看电视的习惯,只是机缘巧合入了坑,工具制作的成就感,占有欲的驱使和网站流量的满足感推动着车轮前进。

当前做音悦台这些个解析模块,主要还是抓网站数据包,解析HTML网页或者API接口返回的文本数据,大部分是Ctrl+C,Ctrl+V就可以完成,就是做多了做久了也觉得繁琐,一劳永逸用起来美滋滋。


文章来源:https://guihet.com/delegate-event-formtx.html

发表回复

您的电子邮箱地址不会被公开。