解决方案 »

  1.   

    你可以认为多个UI控件都属于同一个UI线程。因此,pb1.Invoke,和pb2.Invoke,和form1.Invoke没有本质的区别。
    因此可以利用一个通用的函数,来把一个操作(Action)放到UI线程上去执行:public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }    public void SendAction(Action action)
        {
            if (this.InvokeRequired)
            {
                this.Invoke(action);
            }
            else
            {
                action();
            }
        }    void Test()
        {
            Thread thread = new Thread(delegate()
            {
                Thread.Sleep(50);
                img = HttpOper(httpPath);            this.SendAction(() => { pb1.Image = img; });
                this.SendAction(() => { pb2.Image = img; });
            });
            thread.Start();
        }
    }
      

  2.   

    是的,Form是顶层窗口,直接使用Form.InvokeRequired就行了
    前台线程(消息循环)只有一个
      

  3.   


    谢谢你的回答 很受启发,但可以这样写吗只写一个控件的invoke,
    如:
    if (pb1.InvokeRequired)
    {
    pb1..invoke(new action(()=>{
    pb1.Image = img; 
    pb2.Image = img; 
    pb3.Image = img; 
    });
    }
    action是一个不带参数的委托。