ホームページ > 記事 > システムチュートリアル > WinForm 子スレッドでコントロールの値を更新する方法
1. WinForm サブスレッドでコントロールの値を設定するにはどうすればよいですか?
WinForm では、子スレッドは UI コントロールを直接操作できませんが、コントロールの値は次のメソッドを通じて子スレッドで更新できます:
Invoke
メソッドを使用します。
Invoke
メソッドを通じてデリゲートを呼び出し、更新操作を実行します。 UIスレッド上で。サンプルコード: private void UpdateControlValue(string value) { if (control.InvokeRequired) { control.Invoke(new Action(() => { control.Text = value; })); } else { control.Text = value; } }
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
コントロールを使用してこれを実現できます。詳細な手順は次のとおりです。
タイマー コントロールを追加します。
をドラッグします。 Timer
コントロールをフォームに追加します。 Timer プロパティを設定します。
Timer# の
Interval を設定します。 ## 画像を切り替える時間間隔 (ミリ秒) を示すプロパティ。
PictureBox コントロールを追加します:
コントロールを下部の領域に追加します。表示画像。
画像リストをロードします:
チェックを入れると、イベントが循環して画像が切り替わります。
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]; }
#イベントの
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>
フォーム読み込みイベントで
Timer<pre class="brush:csharp;toolbar:false;">private void Form_Load(object sender, EventArgs e)
{
LoadImages(); // 加载图片
timer.Start(); // 启动Timer
}</pre>
以上がWinForm 子スレッドでコントロールの値を更新する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。