从控制台在新线程上创建表单

时间:2016-12-21 12:29:03

标签: c# multithreading winforms

我有一个奇怪的问题,我无法找到解决办法。

基本上,我有一个控制台应用程序。它需要命令,我从中确定动作。所有操作都涉及打开表单并显示某些内容

目前,我能够输入一个命令,它正确地确定了动作并弹出一个表格,一切都很好。 不幸的是,在这样做的时候,窗体后面的控制台基本上冻结了(我已经意识到它只是不再更新UI了) - 所以如果我尝试在窗体打开时键入另一个命令,那么直到我关闭表格。

我一直在寻找为表单创建一个新线程,其中我猜测是我需要采取的路径 - 但是我无法弄清楚如何做到这一点导致错误(例如,从单独的线程错误中讨厌的非法访问)。

有人可以帮忙吗?

我是否应该从一开始就设置一个表单并通过表单上的文本框输入我的命令? (看起来很烦人,但至少我有一个可以调用其他东西的表格)

1 个答案:

答案 0 :(得分:2)

您可以在另一个线程中从控制台应用程序打开表单,如下所示:

var t = new Thread(() => {
    var f = new Form();
    f.ShowDialog();
});
t.SetApartmentState(ApartmentState.STA);
t.Start();