C# 在外部程序中执行方法,但使其影响参考程序

C# 在外部程序中执行方法,但使其影响参考程序,c#,function,C#,Function,我意识到这可能很难解释,所以让我从Windows的一个例子开始;keBugCheckEx()。 我如何制作一个包含在一个程序中的方法,但当从另一个程序执行时,会影响它所在的程序。例如,在主程序中,您可以: public static void Panic(uint errCode) { System.Windows.MessageBox.Show("Function Panic() was called with error code: " + errCode);

我意识到这可能很难解释,所以让我从Windows的一个例子开始;keBugCheckEx()。

我如何制作一个包含在一个程序中的方法,但当从另一个程序执行时,会影响它所在的程序。例如,在主程序中,您可以:

public static void Panic(uint errCode)
{
    System.Windows.MessageBox.Show("Function Panic() was called with error code: "
        + errCode);
    Application.Exit();
}
然后,在第二个程序中,您可以调用该方法,例如

public static void Main(string[] args)
{
    Foo.Panic(0x3C);
}
我该如何做才能使它不出现在第二个程序中,而出现在第一个程序中?如果没有很好地解释,很抱歉。

您提到了两个独立的“程序”。你是说两个独立的可执行文件吗?我想你的意思是,你会有一个更像类库的项目,它封装了某些函数/验证。您指的是“Foo”,但没有其他声明。。。它是您的整个应用程序“解决方案”中的第二个项目,并且作为主应用程序的一部分包含在#using中。二级类库应该能够做一个简单的messagebox,只要它是从整个主UI线程中调用的

你可能需要进一步阐述/更新你的问题


我猜最终的解决方案是反馈注释,让类在类中只包含一个方法,该方法只将字符串消息传递回调用源。因此,任何调用它的应用程序都可以获取消息并在其自己的UI线程中显示它。

一个进程影响另一个进程的能力是由大多数操作系统严格控制的,这是有充分理由的。一个程序如果能让另一个程序执行不遵循该程序正常逻辑路径的指令,则会导致不良行为,而这种行为是病毒的标志

也就是说,有一些方法可以构造这两个进程,以允许进程间通信;进程通常必须相互对话,并且一个程序通常可以“告诉”另一个程序执行代码,但实际执行代码的决定是由程序做出的。对于两个也可以独立运行的程序,类似命名管道的东西允许一个进程将数据输入到另一个进程中,该进程可以解释为命令


如果这两个进程都是.NET,或者包含代码的库是COM兼容的,那么您只需从调用进程中的其他程序执行代码即可。您只需引用外部库,如果Foo作为一个类对外部使用者可见,则可以实例化一个库并调用其方法。这将是从您自己的流程中的不同流程执行行为的正常方式;但是,您不能告诉使用Foo的不同进程调用Panic(),但不能绝对执行其中的所有内容(包括在所属进程的UI线程上下文中显示对话框)

这就是COM/ActiveX被发明的原因:)和RMI,以及CORBA。。。当前Windows的“最佳答案”是“try WCF”。Do的可能副本会告诉我们您尝试使用的.NET版本。每个版本的“最佳”答案都会发生变化。.NET 4.0,因为它目前只是一个实验。对不起,我的意思是有两个可执行文件。在本例中,由于这是一个实验,因此有“hostApp.exe”和这两个都是控制台应用程序。在hostApp中,有一个名为Panic()的函数将写入控制台(不同但类似于我上面的示例),但从callApp调用。Panic()在hostApp中,并调用另一个函数(这次是私有函数)在hostApp的主类中。我试图实现的是,它不是在callApp上写,而是在hostApp上写。@LiamMcSherry,然后我会在类中有一个方法,该方法除了将字符串消息传递回调用源之外什么都不做。从那以后,任何调用它的应用程序都可以获取消息并在自己的UI中显示它线