我在类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(窗体控件)传递参数,而用字符串参数传递!?
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(窗体控件)传递参数,而用字符串参数传递!?
如:在类 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'); }
再说,我要求的是整个过程不需要控件来完成,也就是说能不能把代码中的lab用某个参数来替换!?
public ftp()
{
}.....myftp.lab = this.label1.Text;
ms-help://MS.MSDNQTR.2003FEB.2052/cpguide/html/cpconDevelopingMultithreadedWindowsFormsControl.htmhttp://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/cpguide/html/cpcondevelopingmultithreadedwindowsformscontrol.asp
先定义一个委托
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;//结果就在这里
}