C# 关于多线程的操作

2020-07-09 09:49发布

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

7条回答
仙女界的扛把子
2楼-- · 2020-07-09 10:08

将委托交给UI线程进行处理

查看更多
Ridiculous、
3楼-- · 2020-07-09 10:09

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

查看更多
Juvenile、少年°
4楼-- · 2020-07-09 10:17

一般来说后台线程是不允许访问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;
    }

查看更多
Rolldiameter
5楼-- · 2020-07-09 10:19

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

查看更多
唯我独甜
6楼-- · 2020-07-09 10:23

Control.CheckForIllegalCrossThreadCalls=false;

 不推荐,游戏可以这么干。
多线程线程里面直接Control invoke就行了
查看更多
地球回转人心会变
7楼-- · 2020-07-09 10:27

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

查看更多
登录 后发表回答