Я хочу создать ядро (также известное как именованные события) из C#.
Должен ли я взаимодействовать с сервисами и заключать в оболочку встроенную функцию CreateEvent или уже существует класс .NET, который выполняет эту работу?
Функция, которую мне нужно запустить, должна быть примерно такой: hEvent = CreateEvent (NULL, false, false, «MyCSHARPEvent»);
Это должно уведомить все процессы, исследующие MyCSHARPEvent, о событии.
Если есть необходимость обернуть функцию, как мне перевести структуру SECURITY_ATTRIBUTES с C# на win32?





Взгляните на класс СобытиеWaitHandle. Он поддерживается начиная с .Net 2.0 и позволяет создавать именованные события. Он также поддерживает настройку безопасности событий в зависимости от того, какой конструктор вы используете.
Если вы все еще хотите использовать взаимодействие, вы можете определить функцию следующим образом:
[DllImport("kernel32.dll")]
static extern IntPtr CreateEvent(IntPtr lpEventAttributes, bool bManualReset, bool bInitialState, string lpName);
и подобная структура (возможно, вам придется повозиться с атрибутом Pack, чтобы он подходил):
[StructLayout(LayoutKind.Sequential)]
struct SECURITY_ATTRIBUTES{
public int length;
public IntPtr securityDesc;
public bool inherit;
}
Кроме того, вот пример кода объединения всего этого.
CF 3.5 теперь поддерживает EventWaitHandles.
Почему так много людей думают, что PInvoke - это решение .net для всего?
@ Дэн, ты понимаешь, что отвечаешь на ответ старше 4 лет, верно?
Ничего себе - я думал, что только CF был искалечен (он все еще не поддерживает имя EventWaitHandles).