gpt4 book ai didi

c# SetCompatibleTextRenderingDefault 必须在第一个之前调用

转载 作者:太空狗 更新时间:2023-10-29 21:26:36 24 4
gpt4 key购买 nike

我试图搜索这个异常,但我找不到任何解决方案

我正在使用下面的代码来调用 .NET 应用程序:

        Assembly assem = Assembly.Load(Data);
MethodInfo method = assem.EntryPoint;
var o = Activator.CreateInstance(method.DeclaringType);
method.Invoke(o, null);

将被调用的应用程序有一个表单,并且在应用程序的入口点中:

    [STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false); //Exception
Application.Run(new Form1());
}

SetCompatibleTextRenderingDefault 必须在应用程序中创建第一个 IWin32Window 对象之前调用。

编辑:

        Assembly a = Assembly.Load(Data);
MethodInfo method = a.GetType().GetMethod("Start");
var o = Activator.CreateInstance(method.DeclaringType);
method.Invoke(o, null);

最佳答案

您应该创建一个跳过初始化的新方法,并通过反射查找 Start 方法。但是 Application.Start 会阻塞当前线程。如果您不想启动一个新的消息泵,您应该尝试使用反射查找 Form 类。


class Program
{
static void Main(string[] args)
{
var path = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
var filename = Path.Combine(path, "WindowsFormsApplication1.exe");
var assembly = Assembly.LoadFile(filename);
var programType = assembly.GetTypes().FirstOrDefault(c => c.Name == "Program"); // <-- if you don't know the full namespace and when it is unique.
var method = programType.GetMethod("Start", BindingFlags.Public | BindingFlags.Static);
method.Invoke(null, new object[] { });
}
}

加载程序集:

static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Start();
}


public static void Start() // <-- must be marked public!
{
MessageBox.Show("Start");
Application.Run(new Form1());
}
}

这在这里有效!

关于c# SetCompatibleTextRenderingDefault 必须在第一个之前调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40490620/

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