我正在将控制台应用程序程序集从资源加载到内存流(稍后到字节数组)并在新线程中执行程序集。请注意,容器组件是标准的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
。
感谢您的帮助!
答案 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()
。