问题:
主窗体是一个线程。我一进程序就创建线程A,在线程A里面创建线程B,线程A和B都需要对界面控件进行操作,目前各种报错,请问怎么完美操作线程?
回答1:
委托或者事件,或者直接不检查线程安全性 Control.CheckForIllegalCrossThreadCalls=false;
回答2:
完美的话当然是把委托交给ui线程来处理咯。
回答3:
Control.CheckForIllegalCrossThreadCalls=false;
回答4:
将委托交给UI线程进行处理
回答5:
窗体程序的话,我一般使用backgroundwork来执行后台任务,当然我用过task来执行后台任务,然后再通过委托来操作窗体,但是感觉这样没有用backgroundwork来得方便,虽然有点老旧了,不过在我看来依旧是windows窗体开发的一大利器
回答6:
一般来说后台线程是不允许访问ui线程的 所以,你如果需要对ui线程进行操作,就需要使用委托,这样就不会出现问题了
public Form1()
{
InitializeComponent();
updateText = new UpdateText(updateTextStart);
}
public void updateTextStart(string text)
{
richTextBox1.Text += text + "\r\n";
}
public void Form1_Load(object sender, EventArgs e)
{
Thread A = new Thread(StartA);
A.Start();
}
public void StartA(object obj)
{
Thread B = new Thread(StartB);
B.Start();
while (true)
{
Thread.Sleep(1000);
Invoke(updateText, "111111111");
}
}
public void StartB(object obj)
{
while (true)
{
Thread.Sleep(1200);
Invoke(updateText, "222222");
}
}
public delegate void UpdateText(string text);
public UpdateText updateText;
}
回答7:
在线程的方法里加上参数,参数为你要操作的控件