Создание событий Win32 из c # - PullRequest
12 голосов
/ 15 января 2009

Я бы хотел создать ядро ​​(называемое событиями) из C #.

Нужно ли взаимодействовать со службами и переносить встроенную функцию CreateEvent, или уже существует класс .NET, который выполняет эту работу?

Функция, которую мне нужно запустить, должна выглядеть примерно так: hEvent = CreateEvent (NULL, false, false, "MyCSHARPEvent");

Это должно уведомить все проки, которые ищут forMyCSHARPEvent о событии.

Если необходимо обернуть функцию, как бы я перевел структуру SECURITY_ATTRIBUTES из C # в win32?

Ответы [ 2 ]

19 голосов
/ 15 января 2009

Взгляните на класс EventWaitHandle . Он поддерживается начиная с .Net 2.0 и позволяет создавать именованные события. Он также поддерживает настройку безопасности событий в зависимости от того, какой конструктор вы используете.

7 голосов
/ 15 января 2009

Если вы все еще хотите использовать взаимодействие, вы можете определить функцию следующим образом:

[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;
}

Кроме того, вот пример кода , в котором все это собрано.

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