我一直在嘗試學習委託。我只是創建了一個按鈕,標籤和複選框。如果我點擊複選框,時間格式會改變。如果我點擊按鈕,我會相應地打印日期。但是想要使用asynchromous代表即使用另一個線程的時候,我堅持錯誤跨線程操作無效:異步委託錯誤
public delegate void AsyncDelegate(bool seconds);
public partial class Form1 : Form
{
AsyncDelegate ad;
TimeZ t = new TimeZ();
public Form1()
{
InitializeComponent();
}
private void btn_async_Click(object sender, EventArgs e)
{
ad = new AsyncDelegate(t.GetTime);
AsyncCallback acb = new AsyncCallback(CB);
if (chk_sec.Checked)
{
ad.BeginInvoke(true, acb, null);
}
else
ad.BeginInvoke(false, acb, null);
}
public void CB(IAsyncResult ar)
{
t.Tim = ar.ToString();
ad.EndInvoke(ar);
lbl_time.Text = t.Tim;
}
而在另一個類庫我得到上面使用Timez。我在項目
public class TimeZ
{
private string tim;
public string Tim
{
get
{
return tim;
}
set
{
tim = value;
}
}
public string GetTime(bool seconds)
{
if (seconds)
{
return DateTime.Now.ToLongTimeString();
}
else
return DateTime.Now.ToShortTimeString();
}
}
添加位置的參考然而,當我運行程序我得到這個錯誤:
Cross-thread operation not valid: Control 'lbl_time' accessed from a thread other than
the thread it was created on.
u能幫助我如何解決這個問題?
令我難以置信的是,有人會對此讚不絕口。你甚至試圖用這個代碼做什麼? –