Выполнение метода во внешней программе, но его влияние на справочную программу - PullRequest
1 голос
/ 29 марта 2012

Я понимаю, что это может быть трудно объяснить, поэтому позвольте мне начать с примера из 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);
}

Как мне сделать так, чтобы вместо MessageBox, отображаемого во второй программе, он отображался в первой программе? Извините, если это не очень хорошо объяснено.

Ответы [ 2 ]

0 голосов
/ 29 марта 2012

Способность одного процесса влиять на другой процесс по очень веской причине строго контролируется большинством операционных систем.Программа, которая может заставить другую программу выполнять инструкции, которые не следуют обычному логическому пути этой программы, может вызвать нежелательное поведение, и такие действия являются отличительной чертой вирусов.

При этом существуют способы структурированияэти два процесса для обеспечения межпроцессного взаимодействия;процессам часто приходится общаться друг с другом, и часто одна программа может «сказать» другой программе выполнить код, но реальное решение сделать это принимает программа.Для двух программ, которые также могут быть автономными, что-то вроде именованного канала позволит одному процессу вводить данные в другой процесс, который можно интерпретировать как команду.

Если оба эти процесса являются .NET илибиблиотеки, содержащие код, совместимы с COM, вы можете просто выполнить код из другой программы в вызывающем процессе.Вы просто ссылаетесь на внешнюю библиотеку, и если Foo как класс видим для внешних потребителей, вы можете создать его экземпляр и вызвать его методы.Это был бы нормальный способ выполнить поведение из другого процесса в вашем собственном;но вы не можете сказать другому процессу с помощью Foo вызвать Panic (), но не можете выполнить абсолютно все в нем (включая отображение диалога в контексте потока пользовательского интерфейса собственного процесса)

0 голосов
/ 29 марта 2012

Вы упомянули две отдельные "программы".Вы имеете в виду два отдельных исполняемых файла?Я думаю, что вы имеете в виду, что у вас будет проект, который является скорее библиотекой классов, которая инкапсулирует определенные функции / проверки.Вы ссылаетесь на «Foo», но никаких других деклараций ... это второй проект в вашем общем приложении "Solution" и включен как часть основного с #using.Библиотеки вторичных классов ДОЛЖНЫ иметь возможность создавать простое окно сообщений, если оно вызывается из общего основного потока пользовательского интерфейса.

Возможно, вам потребуется немного больше проработать / обновить ваш вопрос.

Iдумаю, что окончательным решением был комментарий обратной связи, чтобы у класса был только метод внутри класса, который ничего не делает, кроме передачи строкового сообщения BACK вызывающему источнику.Исходя из этого, любое приложение, вызывающее его, может получить сообщение и отобразить его в своем собственном потоке пользовательского интерфейса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...