2014-10-30 2 views
-2

Я использовал Backgroundworkerlass для обновления моего элемента пользовательского интерфейса (Label). Пожалуйста! Проверьте мой код ниже. Он работает нормально. Но я пытаюсь заменить Backgroundworkerlass и использовать простой рабочий поток для достижения той же цели. Как я могу это достичь? Любое предложение будет оценено по достоинству. БлагодаряЗаменить Backgroundworkerlass с рабочим потоком

public void backgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e) 
    { 
     label1.Text = e.ProgressPercentage.ToString(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     if (!backgroundWorker1.IsBusy) 
      backgroundWorker1.RunWorkerAsync(); 
     else 
      label1.Text = "Busy Processing"; 
    } 

    private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) 
    { 
     for (int i = 0; i <= 100; i++) 
     { 
      Thread.Sleep(100); 
      backgroundWorker1.ReportProgress(i); 

      if (backgroundWorker1.CancellationPending) 
      { 
       e.Cancel = true; 
       backgroundWorker1.ReportProgress(0); 
       return; 
      } 
     } 
    } 

    private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e) 
    { 
     label1.Text = e.ProgressPercentage.ToString(); 
    } 
+0

Я дам вам подсказку: начать писать код, а затем спросить, если что-то пойдет не так. – walther

+0

Если «BackgroundWorker» работает нормально, почему вы хотите усложнить свою жизнь голой нитью? –

+0

Я просто научился использовать как фоновый поток, так и рабочий поток для решения одной и той же проблемы. Это просто учебный процесс. – user3342876

ответ

0
delegate void DelegateDoWork(int number); 
    private void button1_Click(object sender, EventArgs e) 
    { 
     new Thread(DoWork).Start(); 
    } 

    public void ProgressBar(int i) 
    { 
     if (label1.InvokeRequired) 
     { 
      var d = new DelegateDoWork(ProgressBar); 
      this.Invoke(d, i); 

     } 
     else 
      label1.Text = i.ToString(); 
    } 

    public void DoWork() 
    { 
     for (int i = 0; i <= 100; i++) 
     { 
      Thread.Sleep(100); 
      ProgressBar(i); 
     } 
    } 
Смежные вопросы