ホームページ  >  記事  >  システムチュートリアル  >  WinForm 子スレッドでコントロールの値を更新する方法

WinForm 子スレッドでコントロールの値を更新する方法

WBOY
WBOY転載
2024-01-22 12:03:181172ブラウズ

1. WinForm サブスレッドでコントロールの値を設定するにはどうすればよいですか?

WinForm では、子スレッドは UI コントロールを直接操作できませんが、コントロールの値は次のメソッドを通じて子スレッドで更新できます:

  1. Invoke メソッドを使用します。

    • 子スレッドで、コントロールの Invoke メソッドを通じてデリゲートを呼び出し、更新操作を実行します。 UIスレッド上で。サンプルコード:
    private void UpdateControlValue(string value)
    {
        if (control.InvokeRequired)
        {
            control.Invoke(new Action(() => { control.Text = value; }));
        }
        else
        {
            control.Text = value;
        }
    }
  2. BeginInvoke メソッドの使用:

    • Invoke と同様 ただし、BeginInvoke は非同期であり、子スレッドをブロックしません。サンプルコード:
    private void UpdateControlValue(string value)
    {
        if (control.InvokeRequired)
        {
            control.BeginInvoke(new Action(() => { control.Text = value; }));
        }
        else
        {
            control.Text = value;
        }
    }

上記の方法を使用すると、子スレッドで WinForm のコントロール値を安全に更新できます。

2. WinForm フォームの実行中に、そのフォームの下部にいくつかの画像をループで表示するにはどうすればよいですか?

WinForm フォームの下部にあるいくつかの画像を循環するには、Timer コントロールを使用してこれを実現できます。詳細な手順は次のとおりです。

  1. タイマー コントロールを追加します。

    • WinForm で、ツールボックスから をドラッグします。 Timer コントロールをフォームに追加します。
  2. Timer プロパティを設定します。

    • Timer# の Interval を設定します。 ## 画像を切り替える時間間隔 (ミリ秒) を示すプロパティ。
  3. PictureBox コントロールを追加します:

    • PictureBox コントロールを下部の領域に追加します。表示画像。
  4. 画像リストをロードします:

      コード内で画像リストを作成し、
    • Timer を使用します。 チェックを入れると、イベントが循環して画像が切り替わります。
      List<Image> imageList = new List<Image>(); // 存储图片的列表
      int currentIndex = 0; // 当前显示的图片索引
      
      private void LoadImages()
      {
          // 加载图片到imageList中
          imageList.Add(Properties.Resources.Image1);
          imageList.Add(Properties.Resources.Image2);
          // 添加更多图片...
      
          // 初始化PictureBox显示第一张图片
          pictureBox.Image = imageList[currentIndex];
      }
  5. タイマー Tick イベント:

      Tick## at
    • Timer #イベントの PictureBox に表示される画像を更新します。 <pre class="brush:csharp;toolbar:false;">private void timer_Tick(object sender, EventArgs e) { // 循环切换图片 currentIndex = (currentIndex + 1) % imageList.Count; pictureBox.Image = imageList[currentIndex]; }</pre>
  6. タイマーの開始:
  7. フォーム読み込みイベントで

    Timer
      を開始します。
    • <pre class="brush:csharp;toolbar:false;">private void Form_Load(object sender, EventArgs e) { LoadImages(); // 加载图片 timer.Start(); // 启动Timer }</pre>
    上記の手順により、WinForm フォームの下部にいくつかの画像をループで表示できます。

以上がWinForm 子スレッドでコントロールの値を更新する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はdocexcel.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。