2016-09-20 79 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線程上的函數。如果你正在做處理,你會想單獨做,但如果你正在做的瘋狂的GUI的東西,你可能只是沒有效率的代碼。 –

+0

告訴我們相關的代碼! – TaW

回答

0

我在寫這作爲一個答案,因爲它太渴望評論。從創建它們的線程以外的線程訪問/修改GUI控件是非法的。所以,你現在有他們,這三條線:

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"); 

將需要通過調用Control.Invoke(假設這是的WinForms)GUI線程上執行,因爲他們每個人的訪問GUI控制(textBox1.TexttextBox1.Text ,和webBrowser1.Navigate)。如果你把它們放在它們所屬的GUI線程上,那麼在後臺線程上就沒有任何東西存在,所以你不妨去掉它。

看起來你只是想更新webBrowser1每次textBox1.Text的變化。一個更好的方法是將一個事件處理程序附加到textBox1.TextChanged。在該處理程序中,您可以立即編寫文本文件並重新加載網頁OR ...啓動/重新啓動一個定時器,並稍微執行一次更新,當它的Tick事件被觸發時,然後禁用它自己。這樣的設置只會在文本輸入空閒一段時間後刷新,從而減少刷新次數。

進行這些更改並查看您是否仍然存在遊標問題。如果是這樣,回到SO,併爲新的情況創建一個新的問題。