2016-09-20 4 views
-1

У меня есть элемент GUI в форме, что я хочу, чтобы он постоянно обновлялся в режиме реального времени, не делая остальную часть формы невосприимчивой.Как избежать изменения значка курсора автоматически?

Я назначил свой метод обновления потоку, который начинается с конструктора формы.

Недостатком является то, что значок указателя мыши автоматически меняется между значками «По умолчанию» и «AppStarting».

Итак, есть ли способ сделать это, чтобы значок указателя мыши не менялся автоматически, когда происходит обновление, и оставайтесь на значке «По умолчанию»?

обновление: Добавлен код revelent:

Вызываемый метод:

private void WebRefresh() 
    { 
     try 
     { 
      for (int i = 0; i < i + 1; i++) 
      { 
       System.Threading.Thread.Sleep(100); 
       htmlCode = textBox1.Text; 
       File.WriteAllText(@"E:\New folder\Private\My Programs\Html Helper\Data\workingPage.html", textBox1.Text, Encoding.UTF8); 
       webBrowser1.Navigate(@"E:\New folder\Private\My Programs\Html Helper\Data\workingPage.html"); 
      } 
     } 
     catch (IOException ex) 
     { 
      System.Media.SystemSounds.Hand.Play(); 
      MessageBox.Show(ex.Message,ex.TargetSite.ToString()); 
     } 
    } 

Инициализация нити:

Thread WebPreview = new Thread(WebRefresh); 
WebPreview.Start(); 
+0

Нельзя изменять элементы GUI из потока, отличного от потока, на котором они были созданы. – adv12

+2

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

+0

Покажите нам соответствующий код! – TaW

ответ

0

Я пишу это как ответ, потому что это слишком долго для комментария. Недопустимо доступ/изменение элементов управления графическим интерфейсом из потока, отличного от потока, на котором они были созданы. Так что, как вы их сейчас, эти три линии:

htmlCode = textBox1.Text; 
File.WriteAllText(@"E:\New folder\Private\My Programs\Html Helper\Data\workingPage.html", textBox1.Text, Encoding.UTF8); 
webBrowser1.Navigate(@"E:\New folder\Private\My Programs\Html Helper\Data\workingPage.html"); 

должны быть выполнены на GUI потоке, вызвав Control.Invoke (при условии, что это WinForms), потому что каждый из них имеет доступ к управления с графическим интерфейсом (textBox1.Text, textBox1.Text , и webBrowser1.Navigate). Если вы поместите их обратно в поток GUI, где они принадлежат, в фоновом потоке ничего не останется, поэтому вы можете избавиться от него.

Похоже, вы просто пытаетесь обновить webBrowser1 каждый раз, когда textBox1.Text изменений. Гораздо лучший способ сделать это - присоединить обработчик событий к textBox1.TextChanged. В этом обработчике вы можете сразу же написать текстовый файл и перезагрузить веб-страницу ИЛИ ... запустить/перезапустить таймер с небольшим интервалом, который выполняет обновление при запуске события Tick, а затем отключает его. Такая настройка уменьшит количество обновлений, только обновляясь, когда текстовая запись простаивает некоторое время.

Внесите эти изменения и посмотрите, есть ли у вас проблемы с курсором. Если это так, вернитесь к SO и создайте новый вопрос для нового сценария.

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

  • Нет связанных вопросов^_^