gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 17:46:04 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com