2016-09-20 32 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,并为新的情况创建一个新的问题。