请教一下:C#是否允许多个UI线程?

xxd_qd 2016-12-27 10:09:48
我需要用到一个第三方的ocx控件,但那个控件工作的时候会弹出一个模式对话框,也就是说只要它在工作,那么UI的其它部分就无法工作,而一但关掉该对话框,那么这个控件就处于不工作状态。所以我希望把它放在一个单独的Form里,然后把这个Form放到另一个UI线程中,不要影响我的主UI界面的工作。C#能否做到这一点?该怎么做?
...全文
328 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xxd_qd 2016-12-27
  • 打赏
  • 举报
回复
To #4、#5: 可能是我没说清楚,我是要让那个对话框不要阻挡我操作其它界面窗口。
xxd_qd 2016-12-27
  • 打赏
  • 举报
回复
引用 3 楼 bbjiabcd 的回复:
可以的,开个新线程启动另一个窗体

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void btnOpenForm2_Click(object sender, EventArgs e)
        {
            Thread t = new Thread(Thread2);
            t.Start();
            //this.Close();
        }
        private void Thread2()
        {
            Application.Run(new Form2());
        }
    }
万分感谢! 顺便提一句,因为需要在新线程中使用ocx控件,所以上述代码在t.Start()之前要先设置一下STA:t.SetApartmentState(ApartmentState.STA);
software_artisan 2016-12-27
  • 打赏
  • 举报
回复
如果你希望控件不影响你对其它窗体的操作的话,那就必须分开两个各不相干的线程循环了。也就是3楼的方法
  • 打赏
  • 举报
回复
同一个界面用多线程也不会阻挡你界面的其他响应
software_artisan 2016-12-27
  • 打赏
  • 举报
回复
如果你的OCX控件在你的一个窗体里面的话,那么无论如何,只要它弹出一个模态对话框,那么这个窗体无论是否新开一个线程,这个窗体肯定就不会响应了。你需要做的只能是把这个OCX控件单独放在一个窗体里面,以免它影响其它窗体的响应。这样的话,你也不需要新开一个线程,只需要在显示这个窗体的时候使用Show()方法而即可。
bbjiabcd 2016-12-27
  • 打赏
  • 举报
回复
可以的,开个新线程启动另一个窗体

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void btnOpenForm2_Click(object sender, EventArgs e)
        {
            Thread t = new Thread(Thread2);
            t.Start();
            //this.Close();
        }
        private void Thread2()
        {
            Application.Run(new Form2());
        }
    }
xxd_qd 2016-12-27
  • 打赏
  • 举报
回复
我打算把这个控件所在的Form放到一个新线程里。这样控件弹出的那个对话框就不会阻挡我主线程里界面的响应了。
正怒月神 2016-12-27
  • 打赏
  • 举报
回复
意思是你要开个线程吗?

111,097

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧