[英]Information Label
我正在嘗試制作一個信息標簽,該標簽應顯示應用程序正在執行的事件。
刪除數據,讀取數據,寫入數據,連接數據庫。 等等..
我已經在表單中添加了標簽,並且正在為每個操作更改其text屬性,例如:
label1.Text = "stored procedure is being executed..";
但是,在運行時,標簽的文本不會更改。 我試圖添加方法
Application.DoEvents();
在每個地方,我都更改了標簽的text屬性。 工作正常。 但這看起來很愚蠢。 因此,我嘗試將此方法添加到標簽的“ TextChanged”事件中。 但這行不通! 難道我做錯了什么? 要么,
有沒有有效的方法來制作信息標簽?
您應該使用BackgroundWorker ; 處理ProgressChanged事件 ; 並在DoWork處理程序中調用ReportProgress 。 使用此方法,可以避免跨線程異常。
也許設置標簽文本是在與標簽所在位置不同的單獨線程中進行的? 代表可以解決這個問題。
public void setLabelText(string value)
{
if (InvokeRequired)
Invoke(new SetTextDelegate(setLabelText), value);
else
label1.Text = value;
}
delegate void SetTextDelegate(string value);
每當您要更新標簽的文本時,就可以調用setLabelText方法。
如果問題與線程相關,那么您將獲得例外。
該應用程序未更新UI更新,因為它正在忙於做其他事情,例如訪問數據庫。
從這樣的形式的簡單方法開始:
private void SetStatus(string status)
{
label1.Text = status;
Application.DoEvents();
}
然后,您只需在代碼中調用SetStatus("executing...")
等即可。
如果您進行了艱苦的工作,則需要使用@Aaron提到的invoke方法
后台工作人員的建議也很好,但是如果您不需要上述工作,工作人員的工作會變得更加有趣!
PK :-)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.