现在有类A, 窗口B, 类A:socket接收数据想把接收情况用进度条反映出来, 窗口B中有个进度条控件。 那么如何调用这个控件呢? 最好有代码 。谢谢各位!

解决方案 »

  1.   

    窗口B中建立A的实例,然后用A:socket设置进度条的进度。
      

  2.   

    lz:
        这里主要涉及到一个线程调试的问题,窗口线程和通讯线程!如果我们直接在窗口里,调用通讯接口,是无法进行单步调试的(但运行可以,实际上两者不同步)。net提供了一个很好的解决办法:类似C++的回调机制,Control.Invoke 方法 :在拥有此控件的基础窗口句柄的线程上执行委托。
       
       代码实例:
            private void Start_Click(object sender, EventArgs e)
            {
                    tempPort = GetPort(true);
                    bool bSucc = myClient.Connect(currUnion.strIP, tempPort);
                    Thread thread = new Thread(new ThreadStart(MyReceive));//启动接收线程
                    auxThread = thread;                if (myClient.IsConn)
                        myClient.Send(sendBytes);
                    else
                    {
                        MessageBox.Show("连接中断?", "信息提示:", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                        return;
                    }
                    thread.Start();
                }
           }
    private void MyReceive()
            {
                try
                {
                    while (!bControl)
                    {
                        int num = myClient.Receive(receBytes);
                        if (num > 0)
                        {                        this.Invoke(MyDelegate, receBytes);//在拥有控件的基础窗口句柄的线程上,用指定的参数列表执行指定委托。
                        }
                        Array.Clear(receBytes, 0, 536);
                    }
                }
                catch (Exception ex)
                {
                    //MessageBox.Show(ex.Message + "MyReceive");
                }        }
      

  3.   

    to: sdl2005lyx() 也在做类似程序 能把这个类的代码发我看看吗 很感兴趣! 我的msn:[email protected] 邮箱:[email protected] 谢谢