我在类ftp中这么写:
public System.Windows.Forms.Label lab;
public ftp()
{
   lab=new System.Windows.Forms.Label();
}public void test(long i)
{
int iInt=0;
while(true)
{
lab.text=iInt.ToString();
iInt+=1;
if(iInt>=i)
{
break;
}

主窗体:
public ftp myftp=new ftp();
public void Login()
{
                   myftp.test(10000000);
                 }
public delegate void dLogin(); 
private void button1_Click(object sender, System.EventArgs e)
{myftp.lab=this.label1;
                 dLogin d=new dLogin(Login);
//int threadId;
IAsyncResult arLogin=d.BeginInvoke(new AsyncCallback(CallbackMethodLogin),d);
Msg.AppendText("开始连接......"+'\n'); } 
这样以后,在执行了buttion1_click后,this.label1.text就可以自动变化了!
但是我想能不能不用System.Windows.Forms.Label lab(窗体控件)传递参数,而用字符串参数传递!?

解决方案 »

  1.   

    这个问题好象不难啊
    如:在类 ftp 中增加一个公共属性:public string LabelText
    {
      set{lab.Text = value;}
      get{return lab.text;}
    } 在主窗体中:public ftp myftp=new ftp();
    public void Login()
    {
         myftp.test(10000000);
     }
    public delegate void dLogin(); private void button1_Click(object sender, System.EventArgs e)
    {myftp.LabelText = this.label1.Text;
                     dLogin d=new dLogin(Login);
    //int threadId;
    IAsyncResult arLogin=d.BeginInvoke(new AsyncCallback(CallbackMethodLogin),d);
    Msg.AppendText("开始连接......"+'\n'); } 
      

  2.   

    楼上的,你的方法不可行!
    再说,我要求的是整个过程不需要控件来完成,也就是说能不能把代码中的lab用某个参数来替换!?
      

  3.   

    public String lab="";
    public ftp()
    {
       
    }.....myftp.lab = this.label1.Text;
      

  4.   

    建议看看异步调用
    ms-help://MS.MSDNQTR.2003FEB.2052/cpguide/html/cpconDevelopingMultithreadedWindowsFormsControl.htmhttp://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/cpguide/html/cpcondevelopingmultithreadedwindowsformscontrol.asp
      

  5.   

    可以用委托/事件来实现
    先定义一个委托
    public delegate void ShowTestHandler (object sender,string testNumber);
    然后在ftp类中声明一个事件
    public event ShowTestHandler ShowTest;
    然后修改代码:
    while(true)
    {
              if(ShowTest != null)
                 ShowTest(this,iInt.ToString());
    iInt+=1;
    if(iInt>=i)
    {
        break;
    }

    在主窗体中:
    myftp.ShowTest += new ShowTestHandler(this.ShowTestFun);
    ....private void ShowTestFun(object sender,string testNumber)
    {
        this.label1 = testNumber;//结果就在这里
    }