Элементы панели инструментов неактивны в VS 2010

Я пробовал множество попыток исправить эту проблему или ошибку, во-первых, удалив файлы .tbd из C: \ Users \\ AppData \ Local \ Microsoft \ VisualStudio \ x.0.

Я тоже пробовал это:

Visual Studio Меню «Инструменты» Подменю «Параметры» Вкладка «Конструктор форм Windows» Вкладка «Общие» Установите для «AutoToolboxPopulate» значение «Истина»

Список ToolBox по-прежнему заполняется некорректно, а необходимый мне компонент «BackgroundWorker» неактивен. Любые идеи?


person JF Beaulieu    schedule 03.01.2011    source источник
comment
Вы можете опубликовать снимок экрана (ссылка на). Это может показать что-то, что вы пропустили.   -  person ChrisF    schedule 03.01.2011
comment
Вам необходимо задокументировать тип проекта. Одно из исправлений - щелкнуть правой кнопкой мыши на панели инструментов и выбрать «Сброс».   -  person Hans Passant    schedule 03.01.2011
comment
@ChrisF, вот ссылка: dl.dropbox.com/u/14305935/BGW. png   -  person JF Beaulieu    schedule 04.01.2011
comment
Необычно выглядящий ящик для инструментов. Нет, проекты Silverlight не поддерживают компоненты Winforms. Вы должны задокументировать свой тип проекта.   -  person Hans Passant    schedule 04.01.2011
comment
Это проект WPF, и мне нужен компонент BackgroundWorker. Должен быть способ реализовать BackgroundWorker в форме WPF!   -  person JF Beaulieu    schedule 04.01.2011


Ответы (3)


По крайней мере, обходной путь: объявите 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 */
      }
    }
  }
}
person eFloh    schedule 03.01.2011
comment
Но мы не можем добавить компонент в форму WPF, так как же реализовать backgroundWorker1_DoWork () и backgroundWorker1_RunWorkerCompleted ()? - person JF Beaulieu; 04.01.2011
comment
вы можете просто зарегистрировать события в коде, например bgw.DoWork + = новый System.ComponentModel.DoWorkEventHandler (bgw_DoWork); и метод private void DoWorkEventHandler (объект-отправитель, DoWorkEventArgs e) {...} - person eFloh; 04.01.2011
comment
Ваш Код ниже, кажется, в точности использует то, что я написал выше, в таком случае, не могли бы вы потратить немного репутации на меня, используя кнопки голосования, пожалуйста? ;) - person eFloh; 17.01.2011

Я нашел решение своей проблемы, используя класс 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();
                }
        }
}
person JF Beaulieu    schedule 11.01.2011

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

person Spence    schedule 15.03.2012