タイマーを使用して 500 ミリ秒ごとに再描画するグラフィックを作成しようとしていますが、クロススレッド操作が実行され続けています。なぜこれが起こっているのか誰か教えてもらえますか?
エラー:
Cross-thread operation not valid: Control 'GraphicsBox' accessed from a thread other than the thread it was created on.
私は WinForms を使用しており、メイン フォームに「GraphicsBox」という PictureBox があります。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
using System.Threading;
namespace NamespaceName
{
public partial class FormName : Form
{
Graphics g;
public FormName()
{
InitializeComponent();
System.Timers.Timer t = new System.Timers.Timer();
t.Interval = 500;
t.Enabled = true;
t.Elapsed += (s, e) => this.GraphicsBox.Invalidate(true);
}
private void FormName_Load(object sender, EventArgs e)
{
this.GraphicsBox.Paint += new PaintEventHandler(OnPaint);
}
protected void OnPaint(object sender, PaintEventArgs e)
{
g = e.Graphics;
//Draw things
}
}
}
OnPaint
タイマーの「ティック」(または「経過」) からイベントを発生させる方法はありますか? 私はそれがうまくいくと信じています。私がやろうとしているのは、グラフィックス オブジェクトを再描画することだけです。別の方法で描画されるようにコードを変更します。