winform多线程问题

yusuyang 2009-08-11 10:44:43
客户端和服务端交互,采用了http通信的方式,程序中写了个get的方法,传递一个url过去获得返回的值。客户端在登录,查询的时候时候传递不同的url过去获取值,要求:客户端开启的时候开启一个线程,当客户端跟服务器交互的时候通过线程来处理,获得返回的值。问题:如何让一个线程在不同的时候调用。也就是说。如何启动一个线程调用这个get的方法。在登陆的时候传个登录的url给它。在查询的时候传递查询的url给它。注意:是一个线程,而不是在登录的时候开启一个线程调用,查询的时候又开一个线程调用。。。在线急等。。。谢谢大家。。。。
...全文
141 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
yusuyang 2009-08-11
  • 打赏
  • 举报
回复
感谢Dobzhansky(花蝴蝶),我是个初学者,有没有更简单的处理方法啊。呵呵。或者结合我的需求来。。。不好意思
ttianqq 2009-08-11
  • 打赏
  • 举报
回复
自定义一个类,这个类有一个线程属性,用来存放生成的一个线程。并且存放客户端的一个类
把这个自定义类的实例放到一个链表里存起来,每生成一个线程,就创建一个自定义类的实例放到链表中。
当你需要传递不同的url的时候,找到对应的自定义类的实例,然后就可以操作其中客户端的那个类了,你只需要开放客户端类的一个接口,就能够操作这个线程
Dobzhansky 2009-08-11
  • 打赏
  • 举报
回复
控制线程, 用于分派任务的片断

public void Send(byte[] buffer)
{
if (buffer == null || buffer.Length == 0)
return;

_unlockedSendQueueAEVT.WaitOne();
_sendQueue.Enqueue(buffer);
_unlockedSendQueueAEVT.Set();

_moreDataToSendMEVT.Set();
}



工作线程, 用于执行任务的片断

System.Threading.WaitHandle[] wait_handles = new System.Threading.WaitHandle[2];
wait_handles[0] = _closeMEVT;
wait_handles[1] = _moreDataToSendMEVT;
waitResult = System.Threading.WaitHandle.WaitAny(wait_handles);
if (waitResult == 0)// 线程退出
return;
_moreDataToSendMEVT.Reset();
// 当有数据等待发送时
while (_sendQueue.Count > 0)
{
// 队列取出
_unlockedSendQueueAEVT.WaitOne();
local_buffer = (byte[])_sendQueue.Dequeue();
_unlockedSendQueueAEVT.Set();
济南大飞哥 2009-08-11
  • 打赏
  • 举报
回复
我很关注Winform + 多线程的问题,因为这方面我啥也不会,我早就想看看这一方面的例子了,楼主!
yusuyang 2009-08-11
  • 打赏
  • 举报
回复
利用backgroundworker控件能不能实现啊
yusuyang 2009-08-11
  • 打赏
  • 举报
回复
各位老大能不能贴点小例子学习一下啊
dancingbit 2009-08-11
  • 打赏
  • 举报
回复
创建一个类,设置一个集合属性,用于接收要处理的url,线程内部循环,检查这个url集合,处理完一个移除一个,集合空的时候线程Sleep一段时间后再检查集合,重复循环过程,注意设置循环退出条件。
Dobzhansky 2009-08-11
  • 打赏
  • 举报
回复
搞个任务队列, 外头往队列里放任务, 放了后激发内核事件,

工作线程傻傻等待内核事件, 有了任务就从队列取任务,干活

注意任务队列的同步化

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧