110,533
社区成员
发帖
与我相关
我的任务
分享
serialport.Send(bytes);
这样一句话就发送数据了。创建什么线程?
serialport 类型对象提供了 DataReceived 之类的事件,是在这里读取数据,它会在子线程中来回调你的事件处理代码,用你创建线程吗?
所以你说的“用两个线程”,假设你不是为了死循环地那种方式去阻塞和循环去 Read、Write 的话,那么你连自己说的是什么具体流程都不明白了。这样就可能是在为了名词儿而名词儿,并没有什么实际的设计了。[/quote]我大概知道了一点,我就是怕我要是用一个serialport控件的话是不是自己上位机发的数据和下位机传上来的数据会冲突啊?serialport.Send(bytes);
这样一句话就发送数据了。创建什么线程?
serialport 类型对象提供了 DataReceived 之类的事件,是在这里读取数据,它会在子线程中来回调你的事件处理代码,用你创建线程吗?
所以你说的“用两个线程”,假设你不是为了死循环地那种方式去阻塞和循环去 Read、Write 的话,那么你连自己说的是什么具体流程都不明白了。这样就可能是在为了名词儿而名词儿,并没有什么实际的设计了。private static lockflag = new object()[
void test(byte[] data)
{
.......
lock(lockflag)
{
count ++;
device.Send(data);
}
.......
}
这里假设这个 test 方法会大量并发执行,其中有需要线程管理的部分,使得同一时刻只有一个线程能进入这个管理区域,那么我们写 lock 语句。
这个简单的 lock 语句,在很早以前,被说成是必须自己设计一个什么“队列系统”来弄一个独立的“线程”在那里去执行大括号中事情。你觉得学会了 lock 同步语句之后还有必要单独设计一个队列系统吗?
再比如说随时动态注册一个动态委托,将任务交给系统线程池去操作,我们可以写var a = 1;
ThreadPool.QueueUserWorkItem(h =>
{
var b = a + 2;
........
});
或者是使用 async/await,或者 PLinq,或者其它许多方法,这是因为 .net 自己有线程池机制,用不着编程者每一个人都另外再来发明线程池,所以你直接使用 .net 的系统规范方法,这里不用考虑什么“队列”。
这里我说明的是,如果你搞明白应用编程模式,就不会过分技术化地追求底层技术概念。