2016-05-17 15 views
0

スレッドプログラミングでピクチャボックスを移動したい。また、私は自分のソリューションでTextboxを使ってPictureboxのカウントを取得したいと思っていますが、最初の試みで問題があります。手伝っていただけませんか?ここでスレッドプログラミングで動画ボックスを移動

Thread th; 
     public void F_Thread() 
     { 
      for (int i = 0; i < Convert.ToInt16(textBox1.Text); i++) 
      { 
       this.pictureBox1.Left = this.pictureBox1.Left - 10; 
       Thread.Sleep(100); 
      } 
     } 

     private void button1_Click_1(object sender, EventArgs e) 
     { 
      th = new Thread(F_Thread); 
      th.Start(); 
     } 
+0

UIでスレッドを使用することはできません。タイマーまたは 'await'を使用してください。 – SLaks

+1

UIスレッドの外側からUI要素を操作しようとすると、Invokeを使用して行う必要があります。 – TaW

+0

あなたのコメントありがとう、私はタイマーでそれを試したが、私はスレッドでこれを書く必要があります!私はそれをどのように書くことができるか知っていますか? – Sarah

答えて

2

異なるスレッドからのコントロールのプロパティを変更するために呼び出しを使用しての安価な、最小限の例です。

public void F_Thread() 
{ 
    for (int i = 0; i < Convert.ToInt16(textBox1.Text); i++) 
    { 
     if (pictureBox1.InvokeRequired) 
      this.Invoke(new UpdatePBInvoker(UpdatePB), -10); 

     Thread.Sleep(100); 
    } 
} 

delegate void UpdatePBInvoker(int moveX); 

private void UpdatePB(int moveX) 
{ 
    pictureBox1.Left = pictureBox1.Left + moveX; 
} 

は、より多くのパラメータを追加すること自由に感じなさい。ただ機能とデリゲート同じの署名を維持することを確認してください:チェックif (someControl.InvokeRequired)はオプションであり、多くの場合、可能にするために追加

.. this.Invoke(new UpdatePBInvoker(UpdatePB), pictureBox1, -10); 

注:

delegate void UpdatePBInvoker(Control ctl, int moveX); 

    private void UpdatePB(Control ctl, int moveX) 
    { 
     ctl.Left = ctl.Left + moveX; 
    } 

は、このような第二のバージョンを呼び出します異なるスレッドから関数を呼び出さないという選択肢。論文のケースのために1は、通常は直接呼び出してelseブランチを追加します。UpdatePB(...)

はまた、あなたは、フォームを閉じたときに、スレッドがまだを実行することができることに注意してください。エラーは多分このように、それを中止することを確認しないようにするには:

private void Form1_FormClosing(object sender, FormClosingEventArgs e) 
{ 
    if ((th!= null && th.IsAlive) th.Abort(); 
} 

あなたのスレッドは、特にロックをaquiring、より複雑なことをするだろう場合は、は中止されましたが終了するチャンスと密接与えられるべきではありませんグローバルフラグを設定することにより、usuallyになります。しかし、この場合は正常に動作するはずです。このトピックのMSDNも参照してください。

+0

ありがとう、私はそれを使用します。 – Sarah

+0

フォームを閉じることについての追加の注意に注意してください!また、あなたが答えに満足しているなら、[accepting](http://stackoverflow.com/help/accepted-answer)それを考えてください.. ..! – TaW

+0

もちろん、あなたの優しさに感謝します。 – Sarah

関連する問題