0

я пытался многочисленные попытки устранить эту проблему или ошибку, во-первых, удалив .tbd файлы из C: \ Users \\ AppData \ Local \ Microsoft \ VisualStudio \ X.0элементы Toolbox серым цветом в VS 2010

Я также попытался это:

Visual Studio меню "Инструменты" "Options" подменю "Windows Form Designer" вкладка "Общие" вкладка Set "AutoToolboxPopulate" на "True" список

ToolBox по-прежнему не заполняется правильно, а компонент «BackgroundWorker» I потребность будет выделена серым цветом. Есть идеи?

+0

Можете ли вы разместить (ссылку на) снимок экрана. Это может показать что-то, что вы пропустили. – ChrisF

+0

Вам необходимо задокументировать тип проекта. Одно исправление - щелчок правой кнопкой мыши на панели инструментов и нажатие кнопки «Сброс». –

+0

@ChrisF, вот ссылка: http://dl.dropbox.com/u/14305935/BGW.png –

ответ

1

Я нашел решение моей проблемы, используя BackgroundWorker класс в C# без используя компонент из панели инструментов. В этом случае, мне нужно два отдельных backgroundWorkers:

using System.Threading; 

public partial class MainWindow : Window 
    { 
     private BackgroundWorker bw1 = new BackgroundWorker(); 
     private BackgroundWorker bw2 = new BackgroundWorker(); 

     public MainWindow() 
     { 
      InitializeComponent(); 

      bw1.WorkerReportsProgress = true; 
      bw1.DoWork += new DoWorkEventHandler(bw1_DoWork); 
      bw1.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw1_RunWorkerCompleted); 
      bw1.ProgressChanged += new ProgressChangedEventHandler(bw1_ProgressChanged); 

      bw2.WorkerReportsProgress = true; 
      bw2.DoWork += new DoWorkEventHandler(bw2_DoWork2); 
      bw2.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw2_RunWorkerCompleted); 
      bw2.ProgressChanged += new ProgressChangedEventHandler(bw1_ProgressChanged); 
     } 


     private void bw1_DoWork(object sender, DoWorkEventArgs e) 
     { 
      StatsProcessor proc = new StatsProcessor(); 
      proc.CompareStats(listText1, listText2);  
     } 

     private void bw2_DoWork2(object sender, DoWorkEventArgs e) 
     { 
      StatsParser parser = new StatsParser(); 
     } 

     private void bw1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 
     { 
      progressBar2.IsIndeterminate = false; 
      progressBar2.Value = 100; 

      btnCompareStats.IsEnabled = true; 

     } 

     private void bw2_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 
     { 
      progressBar1.IsIndeterminate = false; 
      progressBar1.Value = 100; 

      btnFetchStats.IsEnabled = true; 
     } 

     private void bw1_ProgressChanged(object sender, ProgressChangedEventArgs e) 
     { 
      this.progressBar2.Value = e.ProgressPercentage; 
     } 

     private void bw2_ProgressChanged(object sender, ProgressChangedEventArgs e) 
     { 
      this.progressBar1.Value = e.ProgressPercentage; 
     } 

     private void btnCompare_Click(object sender, EventArgs e) 
     { 
      btnCompareStats.IsEnabled = false; 

      StatsProcessor proc = new StatsProcessor(); 

      if (bw1.IsBusy != true) 
        { 
         progressBar2.IsIndeterminate = true; 

         // Start the asynchronous operation. 
         bw1.RunWorkerAsync(); 
        }  

     } 

     private void btnFetchStats_Click(object sender, RoutedEventArgs e) 
     { 
      btnFetchStats.IsEnabled = false; 

      if (bw2.IsBusy != true) 
       { 
         progressBar1.IsIndeterminate = true; 

         // Start the asynchronous operation. 
         bw2.RunWorkerAsync(); 
       } 
     } 
} 
1

По крайней мере обходной путь: объявить в коде BackgroundWorker, но не забудьте утилизировать его должным образом:

public class MyForm : Form 
{ 
    private BackgroundWorker bgWorker = null; 

    public MyForm() 
    { 
    InitializeComponent(); 

    this.bgWorker = new BackgroundWorker; //TODO: set properties and event handlers 
    } 

    public override void Dispose(bool disposing) 
    { 
    //TODO: copy from MyForm.Designer.cs and add: 
    Backgroundworker bgw = this.bgWorker; 
    this.bgWorker = null; 
    if (disposing && bgw != null) 
    { 
     try 
     { 
     //TODO: release event handlers 
     bgw.Dispose(); 
     } 
     catch(Exception) 
     { 
     /* consumed disposal error */ 
     } 
    } 
    } 
} 
+0

Но мы не можем добавить компонент в форму WPF, так как мы реализуем backgroundWorker1_DoWork() и backgroundWorker1_RunWorkerCompleted()? –

+1

вы можете просто зарегистрировать события в коде, например. bgw.DoWork + = новый System.ComponentModel.DoWorkEventHandler (bgw_DoWork); и метод private void DoWorkEventHandler (object sender, DoWorkEventArgs e) {...} – eFloh

+0

Ваш код ниже, похоже, точно использует то, что я написал выше, в этом случае, можете ли вы потратить на меня некоторую репутацию, используя кнопки голосования, пожалуйста? ;) – eFloh

0

Я бы попробовать сбросить элементы панели инструментов. Затем используйте диалоговое окно «Добавить элемент», чтобы вернуть что-то нужное.

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