如何避免光标图标自动更改?

时间:2016-09-20 12:50:26

标签: c# multithreading mouse-pointer

我在表单中有一个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();

1 个答案:

答案 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.TexttextBox1.Text和{{ 1}})。如果你把它们放回到它们所属的GUI线程上,那么后台线程上就没有任何东西了,所以你也可以摆脱它。

您似乎只是在每次webBrowser1.Navigate更改时尝试更新webBrowser1。更好的方法是将事件处理程序附加到textBox1.Text。在该处理程序中,您可以立即写入文本文件并重新加载网页,或者...启动/重新启动一个具有一些小间隔的计时器,该计时器在其textBox1.TextChanged事件被触发时执行更新,然后禁用自身。这样的设置只会在文本输入空闲一段时间后刷新,从而减少刷新次数。

进行这些更改,看看光标是否仍有问题。如果是这样,请回到SO并为新方案创建一个新问题。