我在C#.NET中有一個簡單的標籤,似乎不是「更新」。它只顯示我的應用程序的第一個初始值。在下面的代碼中,「score」變量不會更新,但是當messagebox.show對話框被調用時它會顯示正確的值。評分值是在不同的線程中更改的,但我不認爲這是調用和跨線程表單控制的問題(因爲我在創建label6的線程中調用此代碼)。標籤文本顯示不正確,但messagebox.show
有誰知道什麼可能是一個解決方案?我嘗試了無效的Application.DoEvents()方法。另外,label6.Update()和label6.Refresh()在放置在label6.Text = score行後面時似乎都不起作用。
玩家是我創建的一個類,其作爲公共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 line是除了在由Visual Studio生成的Form.Designer代碼中實例化之外調用label6的唯一實例。
好吧,你的主線程在做什麼,然後,當它應該處理重繪等消息? – 2012-04-16 18:53:32
這是一個WinForms應用程序嗎? Web應用程序?等等。? – 2012-04-16 18:53:52
一個 - 通常你永遠不想從代碼中調用Application.DoEvents。其次,你確定其他代碼沒有進入這個人的背後,並將標籤文本設置爲其他東西嗎? – Tejs 2012-04-16 18:53:54