如何从C#中的其他线程调用线程?
问题描述:
我想知道如何从C#Windows窗体应用程序中的其他线程调用线程。我正在使用TCP/IP通信开发UI。在我的程序中,我接收到要在图片框上的UI上绘制的数据后,将数据从控制台应用程序(客户端)发送到Windows窗体应用程序(服务器)。如何从C#中的其他线程调用线程?
我在服务器上创建了两个线程,第一个线程是Listener线程(它监听客户端套接字),第二个线程是Handler线程(处理从客户端套接字接收的数据)我想创建图形绘制线程处理线程。
目前,我正在做处理器线程内的图形绘图,但我想在一个单独的线程中执行此操作。请指导我如何做到这一点?
答
有一百万种方法来剥皮这只猫,但这是我对最简单方法的建议。我假设你知道如何创建线程等
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#的具体内容。一本关于通用同步/线程的优秀计算机科学书通常为理解多年来您将遇到的各种平台/语言特定实现提供重要基础。在紧密循环中测试任何多线程代码是一个好主意,特别是如果您无法直接证明同步的正确性。
什么对象类型是'路径'和'g'? –
“路径”做连续绘图,“g”绘制点绘图 – SN25
你是指从另一个线程调用线程是什么?线程是否已经运行,并且您想要将数据传递给它? –