ThreadPool.QueueUserWorkItem new Form CreateHandle死锁

时间:2010-04-27 07:15:22

标签: winforms multithreading deadlock handle

我有一个需要创建弹出窗口的线程。 我使用ThreadPool.QueueUserWorkItem启动线程(new WaitCallback(CreatePopupinThread)) Thew线程创建一个新表单。应用程序在CreateHandle的新Form构造函数中释放。工人线程被锁定... 我该如何解决这个问题?

这就是我创建表单的方式

var form = new ConfirmationForm
                           {
                               Text = entry.Caption,
                               Label = entry.Text,
                           };

在构造函数中,线程进入死锁

public ConfirmationForm()
        {
            InitializeComponent();
        }

2 个答案:

答案 0 :(得分:0)

我认为最好在UI线程上创建“弹出窗口”,然后在“弹出窗口”中创建一个线程来处理你想要它做的事情。

我怀疑,你不能在非ui线程上显示创建的表单 请参阅此答案:Possible to construct form on background thread, then display on UI thread

答案 1 :(得分:0)

我已经解决了这个问题...... 由于在表格激活事件中已经完成了步骤,所以触发了死锁......我已将其移至已显示的事件,现在它可以正常工作......