C# 关于多线程的操作

2020-07-09 09:51发布

问题:

主窗体是一个线程。我一进程序就创建线程A,在线程A里面创建线程B,线程A和B都需要对界面控件进行操作,目前各种报错,请问怎么完美操作线程? 

回答1:

 委托或者事件,或者直接不检查线程安全性 Control.CheckForIllegalCrossThreadCalls=false;



回答2:

完美的话当然是把委托交给ui线程来处理咯。



回答3:

Control.CheckForIllegalCrossThreadCalls=false;

 不推荐,游戏可以这么干。
多线程线程里面直接Control invoke就行了


回答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:

在线程的方法里加上参数,参数为你要操作的控件