2013-08-01 3 views
0

Что я хочу сделать, это динамически создавать форму при выполнении модульного теста. Фактическая форма будет действовать только как индикатор прогресса. Мой модульный тест использует библиотеку Selenium для тестирования веб-сайтов, и было бы неплохо иметь какой-то индикатор прогресса. Я попытался создать новую форму в середине теста, но во время выполнения теста форма просто висит там. Спасибо!Могу ли я открыть новую форму во время работы?

[TestMethod] 
    public void test1() 
    {  
     using(Form1 form=new Form1()) 
     { 
      form.Show(); 
      form.RunAsync(); 
     } 

     Assert.IsTrue(doSomeThing()); 
    } 

И это то, что сейчас будет делать форма. Это просто пример! BackgroundWorker должен заполнить индикатор, однако, после того, как форма показывает вверх, он просто замирает

BackgroundWorker bw; 

private void RunAsync() 
    { 
     bw.RunWorkerAsync(); 
    } 


void bw_DoWork(object sender, DoWorkEventArgs e) 
    { 
     or (int i = 0; i < 100; i++) 
     { 
      Thread.Sleep(100);      
      bw.ReportProgress(i);    
     }   
     bw.ReportProgress(100); 
    } 
+0

вы можете показать нам свой код? я подозреваю, что проблема управления потоками –

+0

в следующий раз, если вы хотите, чтобы люди знали, что вы отредактировали сообщение, напишите комментарий, я не знаю иначе ... –

+0

извините, мой плохой. Я обязательно сделаю это в следующий раз – Tomas

ответ

0

вот простой пример прогресс бар

public Form1() 
{ 
    InitializeComponent(); 
    backgroundWorker1.DoWork += backgroundWorker1_DoWork_1; 
    backgroundWorker1.ProgressChanged += backgroundWorker1_ProgressChanged_1; 
    Load += Form1_Load_1; 
} 

private void Form1_Load(object sender, System.EventArgs e) 
{ 
    // Start the BackgroundWorker. 
    backgroundWorker1.RunWorkerAsync(); 
} 

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) 
{ 
    for (int i = 1; i <= 100; i++) 
    { 
    // Wait 100 milliseconds. 
    Thread.Sleep(100); 
    // Report progress. 
    backgroundWorker1.ReportProgress(i); 
    } 
} 

private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e) 
{ 
    // Change the value of the ProgressBar to the BackgroundWorker progress. 
    progressBar1.Value = e.ProgressPercentage; 
    // Set the text. 
    this.Text = e.ProgressPercentage.ToString(); 
} 

уведомление разница: ваш фон работник сделать некоторую работу , и сообщите об этом, но никто не ловит его, или вы не показываете весь свой код. в любом случае, вы можете принять этот код

+0

Вы правы, я не показываю весь свой код, потому что я не думаю, что это очень актуально. Я пытаюсь выяснить, как создать форму внутри модульного теста, чтобы он не был заблокирован. – Tomas

+0

@ Томас этот код делает именно это. вы можете заменить свой код на это, если вы не хотите показывать остальную часть кода, или можете определить, какое событие не обрабатывается вашим кодом. –

+0

Это действительный код на своем собственном. Но если вы попытаетесь создать эту форму внутри модульного теста, она просто зависает. Может быть, я делаю что-то неправильно. – Tomas

Смежные вопросы