2012-05-03 3 views
0

Это мое кодированиеПроверяется TabPage существует, то создайте новый, если он не

Thread groupid = new Thread(() => 
{ 
     while(true) 
     { 
      GroupIds.ForEach(delegate(String name) 
      { 
       if (tabControl1.TabPages.ContainsKey(name)) 
       { 
       } 
       else 
        tabControl1.TabPages.Add(name); 
      }); 
     } 
}); 

По какой-то причине, если я начну нить (которая проверяет этот цикл, если новое значение в списке появляется, а затем создает новую страницу. Этот код работает до такой степени, что будет отображаться новая вкладка, созданная со значением, а затем примерно через 1 секунду она говорит: «Проект не отвечает», иначе он разбился. Поэтому я не знаю, как исправить это, я пробовал! tabControl1.TabPages.Contains (имя) и другой стиль цикла. Даже без потока он немедленно сбрасывает новую страницу.

+2

Поскольку вы постоянно делегируете поток пользовательского интерфейса (я думаю ...), вы всегда будете его блокировать, что вызывает его невосприимчивость. Я думаю, вам нужно переосмыслить свой дизайн, чтобы вам не нужен другой поток, который постоянно проверяет наличие табуляции и вместо этого использует события. – Ryan

+0

Несоответствие отличается от аварии. Многое не так с дизайном. Вам нужно InvokeRequired, или то, что сказал minitech, скорее всего, ответит на ваши проблемы. –

ответ

0

Доступ к tabControl блокирует ProgramThread. Таким образом, вы фактически блокируете этот поток без остановок. Особенно в такой жесткой петле, это будет выглядеть как приложение не отвечает.

+0

Я имею в виду, на самом деле он говорит, что «Проект перестает работать» и отлаживается. Я сделал обработчик событий, что если элемент добавляется в список, добавьте его в tabControl, он все равно выйдет из строя. – Nom

+0

@Nom: Я поддерживаю свой ответ. Отладчик не сможет ничего из состояния из-за блокировки. – Andrew

+0

http://prntscr.com/8stp1, это скриншот. Вы можете видеть в текстовом поле, он получает groupid и добавляет его в поле tabcontrol. В новом коде я сделал обработчик событий, где он выглядит так. void GroupIds_OnAdd (eventylist.EventyList отправитель, строка) { tabControl1.TabPages.Add (item); } – Nom

0
 if (!tabControl1.TabPages.Contains(tabPage2)) 
     { 
      tabControl1.TabPages.Insert(1, tabPage2); 
     } 

это проверить существуют ли уже таблица страниц, если это не позволит создать .

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