2016-08-11 5 views
1

したがって、UIスレッドのラベルをセレンスレッドから更新する方法に問題があります。ご覧のように、セレンスレッドは、他のクラスの静的メソッド(Login.UserLogin、Run.StartDriver)を使用する「selenium」メソッドを呼び出します。セレンスレッド/クラス内のUIスレッド/クラスのラベルを更新する方法

このクラスのラベルをログインクラスまたはランククラスから変更する方法はわかりません。申し訳ありませんが、コーディングがアマチュアなら、私はC#の学習を始めました。

public class Form1{ 

private void startThread() 
    { 
     if (seleniumThread == null) 
     { 
      stopThread = false; 
      seleniumThread = new Thread(() => selenium(userName, passWord, 
      cyclesWanted)); 

      seleniumThread.Start(); 
     } 
    } 

private void selenium(string user, string pass, int cycles) 
    { 

     driver = new FirefoxDriver(); 

     Login.UserLogin(driver, user, pass); 

     Run.StartDriver(driver, cycles); 

     if (stopThread) 
     { 
      driver.Quit(); 
      return; 
     }   
    } 

private void button1_Click(object sender, EventArgs e) 
    { 
    startThread(); 
    } 

}

答えて

0
  1. ログイン/ファイル名を指定して実行クラスでイベント
  2. イベントがthis.beginInvokeにより、更新にラベルを引き上げます()関数にFormクラスレジスタでは、静的なイベント

  3. を追加(なぜなら、UIスレッドではないからです)。

    public class Login 
        { 
    
         public static event Action<string> TextChange; 
    
    
         private static void OnTextChange(string newText) 
         { 
          if (TextChange != null) 
           TextChange(newText); 
         } 
    
         public static void UserLogin(string driver, string userName,string password) 
         { 
          OnTextChange(userName); 
         } 
    
        } 
    
    
        public class Form1 
        { 
    
         private void registerLoginEvent() 
         { 
          Login.TextChange += Login_TextChange; 
         } 
    
         private void Login_TextChange(string newText) 
         { 
          this.BeginInvoke(()=>label.text = newText); 
         } 
    
        } 
    
関連する問題