zoukankan      html  css  js  c++  java
  • WPF 实时绘图的逻辑

    实时绘图实际上是两个线程。外部线程直接用thread,只有到绘图那个逻辑才用绘图控件的mycanvas2.Dispatcher.Invoke。

    或者说,INVOKE并不是开线程,只是一个绘图的委托而已。

    主线程:

      private void Read_UDP_Click(object sender, RoutedEventArgs e)
            {
                TCPRx mytcp = new TCPRx(" ", );
              

    ---------------------------------

    error

    ---------------------------------

        //Action<Canvas> updateAction = new Action<Canvas>(mytcp.readdata);
                //updateAction.Invoke(this.FigureShow);
                //this.FigureShow.Dispatcher.Invoke(updateAction,this.FigureShow);
                //Action<Canvas, String> updateAction = new Action<Canvas, string>(mytcp.readdata);
                //this.Dispatcher.BeginInvoke(updateAction, this.FigureShow, "");

                new Thread(() =>
                {
                    //this.FigureShow.Dispatcher.Invoke(new Action(() =>
                    {
                        while (true)
                        {
                            mytcp.readdata(this.FigureShow);
                            Thread.Sleep(10);
                        }
                    }
                    //)
                    //);
                }).Start();
            }

    --------------------------------------------------------------------------------------------------------

     绘图

    --------------------------------------------------------------------------------------------------------

    public void readdata(Canvas mycanvas2)
            {
                IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
                EndPoint senderRemote = (EndPoint)sender;

                state = new State(myconnect);
                buffer = new byte[length];
                //myconnect.BeginReceiveFrom(buffer, 0, length, SocketFlags.None, ref senderRemote, drawfigure, state);
                //---- myconnect.Receive(buffer);//buffer, 0, length, SocketFlags.None, ref senderRemote, drawfigure, state);

                string message = System.Text.Encoding.Default.GetString(buffer, 0, length);
                string line = System.Text.Encoding.Default.GetString(buffer, 0, length);
          
                if (string.IsNullOrEmpty(line.Trim()))
                {
                    return;
                }

                //this.userName.Text = " 测试UI";  
                mycanvas2.Dispatcher.Invoke(
                  new Action(
                     delegate()
                     {
                       
                        
                     }
               )
               );


            }

  • 相关阅读:
    基于 Docker 的现代软件供应链
    Java 性能调优指南之 Java 集合概览
    Docker 网络基础介绍
    选择 Java 编写 iOS 与 安卓 App的八大理由
    使用Babel和ES7创建JavaScript模块
    Java 8方法引用使用指南
    软件可扩展性:来自星巴克的经验
    Docker 监控之 SaaS 解决方案
    如何高效的阅读uni-app框架?(建议收藏)
    如何高效的阅读uni-app框架?(建议收藏)
  • 原文地址:https://www.cnblogs.com/gaoxianzhi/p/7003063.html
Copyright © 2011-2022 走看看