有一個StatusProgressBar,通常從線程訪問。爲了確保這一點,它的Text屬性如下: -檢查/解決交叉線程操作
[Browsable(true)]
public override string Text
{
get
{
return prg.Text ;
}
set
{
prg.Text = value;
}
}
而且prg.Text =值看起來像這樣
public override string Text
{
get
{
return base.Text;
}
set
{
Misc.CrossThread(this , delegate
{
base.Text = value;
}, true);
}
public static void CrossThread(Control control, MethodInvoker d, bool forceSynchronous)
{
if (control.InvokeRequired)
{
if (forceSynchronous)
{
control.Invoke((Action)delegate { CrossThread(control, d, forceSynchronous); });
}
else
{
control.BeginInvoke((Action)delegate { CrossThread(control, d, forceSynchronous); });
}
}
else
{
if (control.IsDisposed)
{
throw new ObjectDisposedException("Control is already disposed.");
}
d();
}
}
現在的問題是,當其從UI線程訪問(有時) ,文字不變.. 前。
if (cbGateway.SelectedIndex == -1)
{ bp.Text = "Select GATEWAY"; return; }
這裏「bp」指的是StatusProgressBar
對象。
現在,如果我把一個斷點
{ bp.Text = "Select GATEWAY"; return; }
然後繼續,一切都發生如預期,文字的變化.. 爲什麼文本不會改變第一次?
請閱讀問題 –
@PeterPAD:我讀過這個問題。 OP說:「現在的問題是,當它從UI線程(有時)訪問時,文本不會改變..例如」,所以我認爲他可能正在調用UI線程中長時間運行的任務的更新並且想給個提示。所以,我不明白你downvoting ... – Fischermaen
日Thnx的答案,它幾乎解決我的問題,但有一件事我要問 CrossThread(這一點,委託 { base.Text =值; },真正); } 這裏發佈了一條警告,指出「通過基關鍵字訪問文本導致無法驗證的代碼」 - 它是什麼 –