如何从C#中的其他线程调用线程?

问题描述:

我想知道如何从C#Windows窗体应用程序中的其他线程调用线程。我正在使用TCP/IP通信开发UI。在我的程序中,我接收到要在图片框上的UI上绘制的数据后,将数据从控制台应用程序(客户端)发送到Windows窗体应用程序(服务器)。如何从C#中的其他线程调用线程?

我在服务器上创建了两个线程,第一个线程是Listener线程(它监听客户端套接字),第二个线程是Handler线程(处理从客户端套接字接收的数据)我想创建图形绘制线程处理线程。

目前,我正在做处理器线程内的图形绘图,但我想在一个单独的线程中执行此操作。请指导我如何做到这一点?

+0

什么对象类型是'路径'和'g'? –

+0

“路径”做连续绘图,“g”绘制点绘图 – SN25

+0

你是指从另一个线程调用线程是什么?线程是否已经运行,并且您想要将数据传递给它? –

有一百万种方法来剥皮这只猫,但这是我对最简单方法的建议。我假设你知道如何创建线程等

using System; 
using System.Collections.Generic; 
using System.Threading; 

namespace foo 
{ 
    class Packet 
    { 
     public double x; 
     public double y; 
     public double z; 
    } 

    public class Class1 
    { 
     Queue<Packet> qp; 

     public Class1() 
     { 
      qp = new Queue<Packet>(); 
     } 

     public void SendData(Packet p) 
     { 
      // prevent reader from accessing while we insert 
      lock (qp) 
      { 
       qp.Enqueue(p); 
      } 
     } 

     public void ProcessIncomingPackets() 
     { 
      Packet p; 

      // or until we decide to stop 
      while (true) 
      { 
       p = null; 

       // prevent the writer from adding while we're reading and maybe removing an item 
       lock (qp) 
       { 
        if (0 < qp.Count) 
        { 
         p = qp.Dequeue(); 
        } 
       } 

       // with lock released, do something if we have a packet 
       if (null != p) 
       { 
        // graph, etc. 
       } 

       // spin faster for better responsiveness and more wasted CPU 
       Thread.Sleep(100); // milliseconds 
      } 
     } 

    } // Class 1 
} // namespace 

也有一个亿的方法来优化这一点,但也创造了真正讨厌的错误。 所以我建议你阅读一些关于同步,线程,消息传递的数据结构以及C#的具体内容。一本关于通用同步/线程的优秀计算机科学书通常为理解多年来您将遇到的各种平台/语言特定实现提供重要基础。在紧密循环中测试任何多线程代码是一个好主意,特别是如果您无法直接证明同步的正确性。