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

标签 c# multithreading winforms

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

基本上,我有一个控制台应用程序。它接受命令,我从中确定 Action 。所有的操作都涉及打开一个表单并显示一些东西

目前,我能够输入一个命令,它正确地确定了 Action 并弹出了一个表单,一切都很好。 不幸的是,在这样做的过程中,表单后面的控制台基本上卡住了(我已经意识到它只是不再更新用户界面) - 所以如果我尝试在打开表单时键入另一个命令,什么都不会发生,直到我关闭表格。

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

有人可以帮忙吗?

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

最佳答案

您可以像这样在另一个线程中从控制台应用程序打开表单:

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

关于c# - 从控制台在新线程上创建表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41262843/

相关文章:

c# - 需要全神贯注于异步操作

c# - 如何发送邮件,邮件正文作为参数并使用线程 - C#

c# - DateTimePicker 需要多次单击复选框才能触发 OnValueChanged

c# - 我如何使用 FileSystemWatcher 跟踪文件大小,直到文件大小不再更改?

c# - 如何将命名元组与 Entity Framework 原始 SQL 'SqlQuery' 方法一起使用?

c# - 在 Asp.Net 中回发时检索动态创建的控件的值

C# Socket编程,关闭窗口

python - 一个带有 'while' 的线程 python 得到另一个线程从未启动

c++ - std::thread(可分离)和异常安全

c# - WinForms:如何在一段文本中对齐 LinkLabel?