实时绘图实际上是两个线程。外部线程直接用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()
                 {
                   
                    
                 }
           )
           );

}

最新文章

  1. 剑指offer七:两个链表的第一个公共结点
  2. bash while/until循环学习
  3. NodeVisitor的使用-遍历Geode节点并在它与父节点之间添加一个LOD节点
  4. nodejs: 理解Buffer
  5. JAXB玩转命名空间
  6. Python入门版
  7. P3401: [Usaco2009 Mar]Look Up 仰望
  8. 应用数据存储到sdcard上一定要规范,android4.4.2有新规范
  9. js生成随机字符串或者随机数
  10. 在 Java 中高效使用锁的技巧--转载
  11. delphi TServerSocket的多线程
  12. OVMF基础
  13. [Maven]Maven构建可执行的jar包(包含依赖jar包)
  14. &lt;TCP/IP原理&gt; (三) 底层网络技术
  15. 获取百度地图POI数据一(详解百度返回的POI数据)
  16. docker部署nginx
  17. GAN (Generative Adversarial Network)
  18. 洗礼灵魂,修炼python(52)--爬虫篇—【转载】爬虫工具列表
  19. centos7 pgpool+postgresql
  20. 【LeetCode】238. Product of Array Except Self

热门文章

  1. web编程非常实用的在线工具大全
  2. 嵌入式驱动开发之---dm8127 中sensor 驱动的改变
  3. 嵌入式开发之dmva---基于DMVA2平台720P高清智能分析
  4. 基于开源项目的在线网络视频直播项目---一个很好的电视直播开源项目Sopcast
  5. PL/SQL Developer导入导出Oracle数据库方法
  6. C 编程中fseek、ftell的用法总结
  7. 头文件与cpp文件为什么要分开写
  8. mp3 pcm
  9. Okapi BM25 (BM stands for Best Matching)
  10. 并不对劲的bzoj4825:loj2018:p3721:[HNOI2017]单旋