private void Login()
        {
           bll.Login(txtAccount.Text.Trim(), txtPassword.Text.Trim());
        }        private void menuLogin_Click(object sender, EventArgs e)
        {
            FrmWait.ShowWait("请稍候, 正在登录...");            Thread td = new Thread(new ThreadStart(Login));
            td.Start();
        }
这句在执行时,会报控件线程访问出错。
请问怎么解决?另外,曾经见到某人用一个lampda表达式解决了那一大堆委托,请问那句代码怎么写?
多谢!

解决方案 »

  1.   

    如果要在子线程中调用窗口中访问控件的函数,使用以下的方式
            public delegate void CallLogin();        private void Login()
            {
               if(InvokeRequired)
               {
                   Invoke(new CallLogin(Login)); 
                   return;
               }
               bll.Login(txtAccount.Text.Trim(), txtPassword.Text.Trim());
            }        private void menuLogin_Click(object sender, EventArgs e)
            {
                FrmWait.ShowWait("请稍候, 正在登录...");            Thread td = new Thread(new ThreadStart(Login));
                td.Start();
            }
      

  2.   

    也就是说你要在哪个控件上执行多线程访问的话,用public delegate void CallLogin();
    private void Login()
    {
    if(控件.InvokeRequired)
    {
    控件.Invoke(new CallLogin(Login)); 
    return;
    }
    }
      

  3.   


    class Account
    {
    public string account
    {
    get;set;
    }
    public string Password
    {
    get;
    set;
    }
    public Account(string strAccount,string strPassword)
    {
    account=strAccount;
    Password=strPassword;
    }
    }
    private void Login(objcet para)
            {
               
              bll.Login((para as Account).account, ((para as Account).Password);
            }        private void menuLogin_Click(object sender, EventArgs e)
            {
                FrmWait.ShowWait("请稍候, 正在登录...");            Thread td = new Thread(new ParameterizedThreadStart(Login));
                td.Start(new Account(txtAccount.Text.Trim(), txtPassword.Text.Trim() ) );
            }
      

  4.   

    private void Login()
            {
                Invoke(new System.Windows.Forms.MethodInvoker(delegate() {
                     bll.Login(txtAccount.Text.Trim(), txtPassword.Text.Trim());
                 }));
            }
    http://blog.csdn.net/jinjazz/archive/2008/12/30/3646652.aspx
      

  5.   

    简单的invoke可以用匿名方法,另外不用自己定义委托,System.Windows.Forms.MethodInvoker就是一个无参数的void,系统已经定义过了。
      

  6.   

    MethodInvoker
    在WM手机精简框架中似乎不支持?