C# 线程 : Console application in new thread is invisible

标签 c# .net multithreading console

我正在将控制台应用程序程序集从资源加载到内存流(稍后加载到字节数组)并在新线程中执行该程序集。请注意,容器程序集是标准的 Winforms。

控制台应用程序正在新线程中运行,但不可见。如果将控制台应用程序替换为 winforms 程序集,则主窗体是可见的并且可以正常工作。如果我从磁盘运行控制台应用程序作为测试,它加载正常并且可见。

有什么想法吗?

ThreadStart _thdInvoke;
Thread _thdMain;
MethodInfo _methodInfo;

截图

/* memoryStream is the console application loaded from embedded resource */
var assembly = Assembly.Load(memoryStream.ToArray());
_methodInfo = assembly.EntryPoint;
_thdInvoke = InitializeEp;
_thdMain = new Thread(_thdInvoke);
_thdMain.Start();

截图

private void InitializeEp()
    {
        try
        {
            _methodInfo.Invoke(null, null);
        }
        catch (Exception)
        {

        }
    }

请注意,控制台应用程序 Main 方法已更改,因此 string[] args 已被删除。

感谢您的帮助!

最佳答案

它是“不可见的”,因为控制台窗口实际上并不存在。没有告诉操作系统创建控制台并将所有读/写重定向到它。

It appears you need to do some setup in order to create the console window for your application.

您的 Main() 正在运行,但所有对 Console 的调用都将被完全忽略并且读取不会阻塞。

我测试了您的代码并验证了您的程序应该正在运行(减去控制台窗口)。您可以通过将 void Main() 更改为 int Main() 然后返回一些数字来对此进行测试。 _methodInfo.Invoke(...) 将返回 int Main() 返回的值。

关于C# 线程 : Console application in new thread is invisible,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26724680/

相关文章:

c# - 使用搜索栏在 map 上过滤图钉及其值

c# - 将 LINQ 的输出转换为 Int16

c# - 数据驱动编程/事件驱动编程

ISR 和多线程程序中的 C 'Volatile' 关键字?

c++ - 将监视器方法作为线程参数传递 c++

c# - 页面在回发之前执行功能时的进度条

c# - 关于 XAML、代码隐藏和 MVVM

.net - 通过互联网连接套接字失败

c# - 对象未设置为对象的实例

actionscript 中的多线程或绿色线程?