zoukankan      html  css  js  c++  java
  • 实现动态系统托盘图标

    实现效果:

      

    知识运用:

      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 void StartListen()
            {
                tcpListener = new TcpListener(888);                                     //创建TcpListener对象
                tcpListener.Start();                                                //开始监听
                while (true)
                {
                    TcpClient client = tcpListener.AcceptTcpClient();                    //接受连接请求
                    NetworkStream nstream = tcpListener.AcceptTcpClient().GetStream();   //获取数据流
                    byte[] mbyte = new byte[1024];                                        //建立缓存
                    int i = nstream.Read(mbyte, 0, mbyte.Length);                         //将数据流写入缓存
                    message = Encoding.Default.GetString(mbyte, 0, i);                    //获取传输的内容
                }
            }
    
            private void button2_Click(object sender, EventArgs e)
            {
                try
                {
                    //IPAddress[] ip = Dns.GetHostAddresses(Dns.GetHostName()); //获取本机地址
                    string message = "干得好,赏啤酒一箱";                   //传输的内容
                    TcpClient client = new TcpClient(textBox1.Text, 888);    //创建TcpClient对象
                    NetworkStream netstream = client.GetStream();           //创建NetworkStream对象
                    StreamWriter wstream = new StreamWriter(netstream, Encoding.Default);    //创建StreamWriter对象
                    wstream.Write(message);                                                 //将信息写入流
                    wstream.Flush();
                    wstream.Close();                                                        //关闭流
                    client.Close();                                                         //关闭TcpClent对象
                }
                catch (Exception ex) { MessageBox.Show(ex.ToString()); }
            }
    
            bool k = true;                                                        //一个标记用于控制图标闪动
            private void timer1_Tick(object sender, EventArgs e)
            {
                if (message.Length > 0)
                {                                           //如果网络中传输了数据
                    notifyIcon1.Text = message;
                    if (k)
                    {
                        notifyIcon1.Icon = Properties.Resources._1;                 //托盘图标为1
                        k = false;
                    }
                    else
                    {
                        notifyIcon1.Icon = Properties.Resources._2;                 //托盘图标为2
                        k = true;
                    }
                }
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                td = new Thread(new ThreadStart(this.StartListen));                 //通过线程调用StartListen方法
                td.Start();                                                         //开始运行线程
            }
    
            private void Form1_FormClosed(object sender, FormClosedEventArgs e)
            {
                if (tcpListener != null)
                {
                    tcpListener.Stop();                                              //停止侦听对象
                }
                if (td != null)
                {
                    if (td.ThreadState == ThreadState.Running)                       //判断线程是否运行
                        td.Abort();                                                 //终止线程
                }
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                message = "";                                                       //清空传输内容
            }
    
  • 相关阅读:
    VisualSVN 服务不能自动启动的问题
    "There is already an open DataReader associated with this Command which must be closed first"错误
    LINQ 中调用存储过程自动绑定列名
    vs2008中调试iis7.0托管的程序
    SQL SERVER 2005的一个怪问题: 在查询结果面板中编辑失败.
    在VS2003下把一个DataTable Update 到数据库
    帮人解决一个小问题:QQ空间登录时脚本错误造成无法登入
    关于Sys未定义错误
    多层母版页嵌套中, 内层母版页的事件默认不触发
    线程同步
  • 原文地址:https://www.cnblogs.com/feiyucha/p/10127480.html
Copyright © 2011-2022 走看看