Cross-thread operation not valid: Control ‘progressBar1′ accessed from a thread other th

來源:互聯網
上載者:User

<div class=" article-meta>當您試圖從單獨的線程更新一個win form時,您將得到如下錯誤資訊: 
"Cross-thread operation not valid: Control 'progressBar1' accessed from a thread other than the thread it was created on."  本文將介紹如何處理此錯誤:

問題:

 重現該錯誤, 添加一個 progress bar 控制項 (progressbar1) 以及一個  button(btnStart)到您的表單上:.

private void btnStart_Click(object sender, EventArgs e)
{
progressBar1.Minimum = 0;
progressBar1.Maximum = 100;

System.Threading.Thread t1 = new System.Threading.Thread(startProgress);
t1.Start();
}
void startProgress()
{
for (int i = 0; i {
progressBar1.Value = i; //You will get error at this line
System.Threading.Thread.Sleep(100);
}
}

window.google_render_ad();

解決方案:

private void btnStart_Click(object sender, EventArgs e)
{
progressBar1.Minimum = 0;
progressBar1.Maximum = 100;

System.Threading.Thread t1 = new System.Threading.Thread(startProgress);
t1.Start();
}
void startProgress()
{
for (int i = 0; i {
SetControlPropertyValue(progressBar1, "value", i); //This is a thread safe method
System.Threading.Thread.Sleep(100);
}
}

delegate void SetControlValueCallback(Control oControl, string propName, object propValue);
private void SetControlPropertyValue(Control oControl, string propName, object propValue)
{
if (oControl.InvokeRequired)
{
SetControlValueCallback d = new SetControlValueCallback(SetControlPropertyValue);
oControl.Invoke(d, new object[] { oControl, propName, propValue });
}
else
{
Type t = oControl.GetType();
PropertyInfo[] props = t.GetProperties();
foreach (PropertyInfo p in props)
{
if (p.Name.ToUpper() == propName.ToUpper())
{
p.SetValue(oControl, propValue, null);
}
}
}
}

您可以通過該解決方案來處理所有的WIndows 控制項. 您所要做的是, 從上方的代碼中copy SetControlValueCallback delegate 以及SetControlPropertyValue 函數 function.

例如您想設定一個 label的內容, 使用SetControlPropertyValueSetControlPropertyValue(Label1, "Text", i.ToString()); 

請確認您所應用的屬性的實值型別.在上面的Demo中 Text 是一個 string 屬性. 這就是我為什麼將其轉換為String。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.