Я выбрал бы, если оператор ради ясности и соглашения, хотя я уверен, что некоторые не согласились бы. В конце концов, Вы желаете сделать что-то if
, некоторое условие верно! Наличие переключателя с одним действием кажется немногим... unneccesary.
Короче говоря, невозможно напрямую вызывать функции в другом процессе. Процесс, содержащий функцию, к которой вы хотите получить доступ (в данном случае ваша служба Windows), должен будет предоставить ее через своего рода IPC (межпроцессное взаимодействие). Какой тип IPC вы выберете, вероятно, будет зависеть от того, насколько сложным должно быть взаимодействие, а также от того, является ли «клиент» приложением .NET.
Если ваши потребности просты (например, просто установить значение таймера) или если ваш клиент не использует .NET, использование именованных каналов (или TCP, если вам нужно получить доступ к службе с другой физической машины), вероятно, будет лучшим вариантом. делать ставку. И именованные каналы, и TCP предоставляют вам поток, в который вы можете писать сообщения и читать на другом конце.
Если вам нужно предоставить много разных функций или отправлять и получать сложные типы данных, и если вы используете .NET на обоих заканчивается, .NET Remoting или WCF, вероятно, лучше всего. .NET Remoting проще, но имеет больше ограничений; WCF очень гибкий, но требует более крутого обучения.
И именованные каналы, и TCP предоставляют вам поток, в который вы можете писать сообщения и читать на другом конце.Если вам нужно предоставить много разных функций или отправлять и получать сложные типы данных, и если вы используете .NET на обоих заканчивается, .NET Remoting или WCF, вероятно, лучше всего. .NET Remoting проще, но имеет больше ограничений; WCF очень гибкий, но требует более крутого обучения.
И именованные каналы, и TCP предоставляют вам поток, в который вы можете писать сообщения и читать на другом конце.Если вам нужно предоставить много разных функций или отправлять и получать сложные типы данных, и если вы используете .NET на обоих заканчивается, .NET Remoting или WCF, вероятно, лучше всего. .NET Remoting проще, но имеет больше ограничений; WCF очень гибкий, но требует более крутого обучения.
Вы не можете вызвать метод в процессе службы Windows напрямую, но вы можете сделать так, чтобы служба Windows открывала эту функцию, например, как службу WCF. Служба Windows также будет выступать в качестве узла службы. Это возможно и несложно.
Да, это возможно.
Возможно, вы захотите создать конечную точку NetNamedPipe в своей службе и управлять службой через этот интерфейс.
NetNamedPipeBinding binding = new NetNamedPipeBinding();
MyService myService = new MyService(binding,
new EndpointAddress("net.pipe://localhost/MyService"));
myService.ResetTimer(30);
Более старые (не WCF) службы могут использовать .NET Remoting. Посмотрите здесь , чтобы получить информацию о том, как начать работу. Это предшествующий WCF способ связи между приложениями через границы процессов.