![](/img/trans.png)
[英]How do I call a method from SessionSwitch event in windows application using c#?
[英]How do I call a c# windows application from a control?
我不需要在c#控件中调用ac#应用程序,因为我不希望将应用程序重写为控件。
我可以使用System.Diagnostics.Process.Start启动应用程序。
现在,我如何通过/通过c#控件调用应用程序中的方法,因为这是我使用System.Diagnostics.Process.Start调用应用程序的地方
最简单的方法是将应用程序从.exe更改为.dll,然后像普通库一样在项目中引用该应用程序。
您不能调用另一个进程的“方法”,因为它在完全不同的OS进程中运行。 从本质上讲,您将不得不要求流程为您执行一个方法,等待结果,然后将信息编组回您的流程中。 当然,您将不得不通过某种进程间通信技术(例如WCF,COM +等)公开这些方法。如果您可以对执行程序进行这种访问,则也可以直接使用程序集。
如果您能提供帮助,那么您真的不想经历那件事。 这将更加麻烦。
既然有了源代码,请按照@Nick Berardi的建议将其复制到新项目中或创建一个DLL。
您可以修改.exe应用程序并向其添加远程接口,使其成为服务器进程,然后让您的“控件”充当服务器上的客户端进程和调用方法。
这是一个骇人听闻的设计,我不推荐使用,但自从您问到:)
您可以使用System.Reflection进入任何程序集,而无需考虑EXE或DLL格式。
例如,要运行另一个应用程序,
string fileName = "MainApp.exe";
string className = "Program";
string methodName = "Main";
string[] args = {"arg1", "arg2"};
Assembly asm = Assembly.LoadFrom(fileName);
foreach (Type typ in asm.GetTypes())
{
if (typ.Name == className)
{
BindingFlags flags = BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static;
MethodInfo method = typ.GetMethod(methodName, flags);
method.Invoke(null, new object[] { args });
}
}
要使用其他方法,请相应地更改名称。
这是基于我最初从此示例派生的实际工作代码。
不过,可能有更好的编写方法- 该线程建议使用Activator类获得更简洁的代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.