多个线程同时执行任务,任务过程中会返回验证码图片,要求用户输入验证码内容,如何把图片轮流输出到程序界面,并且让线程接收用户输入的信息然后继续任务?

解决方案 »

  1.   

    定义一个 Form ,上面放一个显示图片的控件和一个文本框,在线程里调用 this.Invoke ShowDialog 那个 Form ,把验证码图片显示在 Form 上,用户在文本框输入后,根据输入值设置 Form 返回值,并关闭 Form ,在线程里取得返回值下一步处理
      

  2.   

    参考
    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
      

  3.   


    不太明白你的意思,我的意思是,如果有数十个验证码等待输入,这个方法也行么?如果有多个线程里的mre同时在等待界面的激活信号,发出一个会不会所有线程都收到?
      

  4.   

    原来你是这意思,那你只要在线程里调用 this.Invoke ShowDialog 就行了,这是同步的,先调用的先弹出,关闭后继续执行下一步,完全满足你 2L 的需求。
      

  5.   


    有没有给ManualResetEvent mre = new ManualResetEvent(false);设置个ID?
      

  6.   

    有没有办法给mre设置个ID?例如这样 mre[0].Set();
      

  7.   

    不需要 ManualResetEvent 这个了,我以为你要排出来的顺序,既然是先取得先出,那就通过调用 Invoke ,让他们在主线程排队,先输入完的先进行下一步
      

  8.   


    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里面,然后循环ListthrList[imgIndex].Mre.Set();