2016-09-20 5 views
-1

フォームのGUI要素があり、フォームの残りの部分を応答せずにリアルタイムで連続的にリフレッシュする必要があります。カーソルアイコンが自動的に変わるのを避けるには?

フォームのコンストラクタで始まるThreadにrefreshメソッドを割り当てました。

「デフォルト」アイコンと「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コントロールを作成したスレッド以外のスレッドからGUIコントロールにアクセス/変更することは不正です。あなたは今、それらを持っているように、これら3つのライン:

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コントロール(textBox1.TexttextBox1.Textにアクセスするので、(これはリサイズであると仮定して)Control.Invokeを呼び出すことにより、GUIのスレッドで実行する必要があります、およびwebBrowser1.Navigate)。あなたが属しているGUIスレッドにこれらを戻すと、バックグラウンドスレッドに何も残っていないので、それを取り除くこともできます。

textBox1.Textが変更されるたびにwebBrowser1を更新しようとしているようです。これを行うもっと良い方法は、イベントハンドラをtextBox1.TextChangedにアタッチすることです。そのハンドラでは、すぐにテキストファイルを書き込んでWebページをリロードするか、またはTickイベントが発生したときに更新を実行してから、それ自体を無効にして、若干の間隔でタイマーを開始/再起動することができます。このような設定では、テキスト入力がしばらくの間アイドル状態になったときにリフレッシュするだけで、リフレッシュ回数を減らすことができます。

これらの変更を加えて、カーソルにまだ問題がないかどうかを確認します。そうなら、SOに戻って新しいシナリオの新しい質問を作成してください。

関連する問題