「更新」していないように見える C#.NET の単純なラベルがあります。アプリケーションの最初の初期値のみが表示されます。次のコードでは、「score」変数は更新されませんが、messagebox.show ダイアログが呼び出されたときに正しい値が表示されます。スコア値は別のスレッドで変更されますが、呼び出しとクロス スレッド フォーム制御の問題ではないと思います (label6 が作成されたスレッドでこのコードを呼び出しているため)。
何が解決策になるか知っている人はいますか?Application.DoEvents() メソッドを無駄に試しました。また、label6.Text = score 行の後に配置すると、label6.Update() も label6.Refresh() も機能しないようです。
Player は、スコア値を public int として保持する、私が作成したクラスです。
public Form1()
{
InitializeComponent();
createGame();
}
public void createGame()
{
InitializeComponent();
drawThread = new Thread(draw);
MessageBox.Show(player.score);
label6.Text = player.score;
}
public void draw()
{
//do drawing, change player.score value
//end thread
}
public void button_click()
{
if(firstrun)
drawThread.Start()
else{
createGame()
drawThread.Start()
}
}
編集 (コメントから): これは WinForms アプリケーションです。label6.Text = score 行は、Visual Studio によって生成された Form.Designer コードでインスタンス化される以外に、label6 が呼び出される唯一のインスタンスです。