动态系统托盘图标

Posted feiyucha

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了动态系统托盘图标相关的知识,希望对你有一定的参考价值。

实现效果:

  技术分享图片

知识运用:

  TcpListener TcpClient  和  NetworkStream类 及  Timer组件

  1> TcpListener类    //用来从Tcp网络客户端侦听连接

  技术分享图片

  2> TcpClient类    //为Tcp网络服务提供客户端连接

  public TcpClient(string hostname,int port)  //远程主机的DNS名 端口号

  3> NetworkStream类  //提供在阻止模式下通过Stream套接字发送和接受数据的方法

    //其Read方法用于从NetworkStream类读取数据

  public override int Read(byte[] buffer,int offset,int size)

  技术分享图片

  4> notifyIcon控件的Icon属性

实现代码:

        //声明变量
        private Thread td;
        private string message = "";
        private TcpListener tcpListener;
        //监听方法
        private void startListen()
        {
            tcpListener = new TcpListener(999);
            tcpListener.Start();
            while (true)
            {
                TcpClient client = tcpListener.AcceptTcpClient();
                NetworkStream netStream = client.GetStream();
                byte[] bt=new byte[1024];
                netStream.Read(bt,0,bt.Length);
                message = Encoding.Default.GetString(bt);
            }
        }
        //发送消息
        private void button1_Click(object sender, EventArgs e)
        {
            TcpClient client = new TcpClient(textBox1.Text,999);
            string msg = "嗨,你好! 南极鱼";
            NetworkStream netStream = client.GetStream();
            StreamWriter sw = new StreamWriter(netStream);
            sw.WriteLine(msg);
            sw.Flush();
            sw.Close();
            client.Close();
        }
        //初始化
        private void Form1_Load(object sender, EventArgs e)
        {
            td = new Thread(new ThreadStart(startListen));
            td.Start();
            timer1.Start();
        }
        //清理工作
        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (td.ThreadState == ThreadState.Running)
                td.Abort();
            if (tcpListener != null)
                tcpListener.Stop();
        }
        //定时检查有无消息
        bool flag;
        private void timer1_Tick(object sender, EventArgs e)
        {
            if (message.Length > 0)
            {
                if(flag)
                    { notifyIcon1.Icon = Properties.Resources._1; flag = false; }
                else
                    { notifyIcon1.Icon = Properties.Resources._2; flag = true; }
            }
        }
        //停止闪烁
        private void button2_Click(object sender, EventArgs e)
        {
            message = "";
            notifyIcon1.Icon = Properties.Resources._3;
        }

  

以上是关于动态系统托盘图标的主要内容,如果未能解决你的问题,请参考以下文章

从Webdings字体创建系统托盘图标

Qt设置系统托盘图标和程序图标

如何将delphi程序图标放入系统托盘中?

Qt5 (Linux/LXDE) 中不显示系统托盘图标

Shell_NotifyIcon 在系统托盘中创建空白、无响应的图标

如何使用 Python 和 GTK 创建具有自定义文本和透明背景的状态图标/系统托盘图标?