我在表单中有一个GUI元素,我希望它能够实时连续刷新,而不会使表单的其余部分无响应。
我已将其刷新方法分配给以表单构造函数开头的Thread。
缺点是鼠标指针的图标在'默认'之间自动改变。和“AppStarting'图标不断。
那么,有没有一种方法可以让鼠标指针的图标在刷新时自动改变,并保持其默认状态。图标?
更新:添加了令人敬畏的代码:
被调用的方法:
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 :(得分: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
在GUI线程上执行(假设这是winforms),因为它们中的每一个都访问GUI控件(textBox1.Text
,textBox1.Text
和{{ 1}})。如果你把它们放回到它们所属的GUI线程上,那么后台线程上就没有任何东西了,所以你也可以摆脱它。
您似乎只是在每次webBrowser1.Navigate
更改时尝试更新webBrowser1
。更好的方法是将事件处理程序附加到textBox1.Text
。在该处理程序中,您可以立即写入文本文件并重新加载网页,或者...启动/重新启动一个具有一些小间隔的计时器,该计时器在其textBox1.TextChanged
事件被触发时执行更新,然后禁用自身。这样的设置只会在文本输入空闲一段时间后刷新,从而减少刷新次数。
进行这些更改,看看光标是否仍有问题。如果是这样,请回到SO并为新方案创建一个新问题。