C#Threading:新线程中的控制台应用程序是不可见的

时间:2014-11-03 22:45:12

标签: 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

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

它是"隐形"因为控制台窗口实际上并不存在。没有告诉操作系统创建控制台并重定向所有读/写操作。

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()

相关问题