我的一条线程(主)用于显示窗体控件 InitializeComponent();
另一条(次)用于给窗体的控件填充数据。
为什么有的能够填充上,而有的就干脆连控件都不给显示了 Control.CheckForIllegalCrossThreadCalls = false;用个这条语句防止两条线程操作一个控件的错误提示
另一条(次)用于给窗体的控件填充数据。
为什么有的能够填充上,而有的就干脆连控件都不给显示了 Control.CheckForIllegalCrossThreadCalls = false;用个这条语句防止两条线程操作一个控件的错误提示
public partial class Form1 : Form
{
private delegate void UIOperater(string str);
Thread thrd; public Form1()
{
InitializeComponent();
} private void btnOK_Click(object sender, EventArgs e)
{
//打开一个线程
if (thrd == null || !thrd.IsAlive)
{
thrd = new Thread(new ThreadStart(ChangeBtnTxt));
thrd.Start();
}
} private void ChangeBtnTxt()
{
uint i = 0;
while (true)
{
i++;
i = i % 10000;
this.Invoke(new UIOperater(SetBtnTxt), new object[] { i.ToString() });
Thread.Sleep(100);
}
} private void SetBtnTxt(string str)
{
this.btnOK.Text = str;
}
}
{
//TODO~~~~
}).Start();
大侠,这样写可不可以?
你的工作线程在操作UI线程的时候,UI线程可能也在操作该控件,小概率事件导致该控件处于一个无效状态,那么UI就罢工了要进行跨线程操作UI,一般是把实际操作控件的工作post到UI线程中,让UI现成去自己搞给你个完整的例子:
http://dev.tot.name/csharp/html/20090327/20090327145402.htm
不知道你的数据线程是不是在InitializeComponent()调用前就开始了
可能的原因是 两个线程的同步问题
建议 在InitializeComponent()方法完成后在Start数据加载的线程
或者同步InitializeComponent方法,不过效率更低