多线程任务时,向程序界面发出信息,并且等待用户响应

kain135 2012-06-03 02:15:22
多个线程同时执行任务,任务过程中会返回验证码图片,要求用户输入验证码内容,如何把图片轮流输出到程序界面,并且让线程接收用户输入的信息然后继续任务?
...全文
87 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
kain135 2012-06-03
  • 打赏
  • 举报
回复

List<qqlist> thrList = new List<qqlist>();
public struct imglist
{
public Byte[] img;
public AutoResetEvent mre;
public bool New;
}

thrList[0].mre.Set();



谢谢avphoenixi给我的启发,我搞定了,我把验证码和mre都存在List里面,然后循环List

thrList[imgIndex].Mre.Set();
__天涯寻梦 2012-06-03
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]
有没有办法给mre设置个ID?例如这样 mre[0].Set();
[/Quote]
不需要 ManualResetEvent 这个了,我以为你要排出来的顺序,既然是先取得先出,那就通过调用 Invoke ,让他们在主线程排队,先输入完的先进行下一步
kain135 2012-06-03
  • 打赏
  • 举报
回复
有没有办法给mre设置个ID?例如这样 mre[0].Set();
kain135 2012-06-03
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
引用 4 楼 的回复:
引用 3 楼 的回复:
参考

C# code

ManualResetEvent mre = new ManualResetEvent(false);

ThreadPool.QueueUserWorkItem(param =>
{
Thread.Sleep(5000);
Console.WriteLine(1);
mre.Set();
});
……
[/Quote]

有没有给ManualResetEvent mre = new ManualResetEvent(false);设置个ID?
__天涯寻梦 2012-06-03
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
引用 3 楼 的回复:
参考

C# code

ManualResetEvent mre = new ManualResetEvent(false);

ThreadPool.QueueUserWorkItem(param =>
{
Thread.Sleep(5000);
Console.WriteLine(1);
mre.Set();
});

ThreadPool……
[/Quote]
原来你是这意思,那你只要在线程里调用 this.Invoke ShowDialog 就行了,这是同步的,先调用的先弹出,关闭后继续执行下一步,完全满足你 2L 的需求。
kain135 2012-06-03
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
参考

C# code

ManualResetEvent mre = new ManualResetEvent(false);

ThreadPool.QueueUserWorkItem(param =>
{
Thread.Sleep(5000);
Console.WriteLine(1);
mre.Set();
});

ThreadPool.……
[/Quote]

不太明白你的意思,我的意思是,如果有数十个验证码等待输入,这个方法也行么?如果有多个线程里的mre同时在等待界面的激活信号,发出一个会不会所有线程都收到?
__天涯寻梦 2012-06-03
  • 打赏
  • 举报
回复
参考
ManualResetEvent mre = new ManualResetEvent(false);

ThreadPool.QueueUserWorkItem(param =>
{
Thread.Sleep(5000);
Console.WriteLine(1);
mre.Set();
});

ThreadPool.QueueUserWorkItem(param =>
{
Thread.Sleep(2000);
mre.WaitOne();
Console.WriteLine(2);
});

先输出 1,再输出 2
kain135 2012-06-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
定义一个 Form ,上面放一个显示图片的控件和一个文本框,在线程里调用 this.Invoke ShowDialog 那个 Form ,把验证码图片显示在 Form 上,用户在文本框输入后,根据输入值设置 Form 返回值,并关闭 Form ,在线程里取得返回值下一步处理
[/Quote]

多个线程同时执行任务,可能3号线程先取得验证码,接着2号线程再取得验证码

如何让3号验证码优先显示在界面上2号的验证码排队等候,并且用户输入3号验证码内容后,先反馈给3号线程
__天涯寻梦 2012-06-03
  • 打赏
  • 举报
回复
定义一个 Form ,上面放一个显示图片的控件和一个文本框,在线程里调用 this.Invoke ShowDialog 那个 Form ,把验证码图片显示在 Form 上,用户在文本框输入后,根据输入值设置 Form 返回值,并关闭 Form ,在线程里取得返回值下一步处理

111,126

社区成员

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

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

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