Создать пользовательское событие из DLL в C # - PullRequest
2 голосов
/ 14 января 2011

Я пишу DLL на C #, используя VS2008.

Эта DLL работает как интерфейс между Приложением и Последовательным портом.Приложение отправляет данные в определенном формате (или следует стандартному протоколу) в эту DLL.DLL преобразует его для последовательной передачи и передачи через последовательный порт.Это же приложение, запущенное на другом ПК (означает, что действует как клиент) и подключенное через последовательный порт, получает эти данные.Та же DLL получает эти данные.Теперь он преобразует обратно в стандартный протокол и помещает его в буфер, чтобы приложение могло его прочитать.

Нет проблем при отправке данных, но при получении я использовал событие Serial Data Received в DLL, чтобыон может получить данные и обработать их.Моя проблема заключается в том, как я могу указать приложению, что данные обрабатываются и доступны для них, и они могут читать буфер?

Могу ли я использовать SetEvents в DLL и можно ли указывать приложение, использующее этоDLL

Ответы [ 2 ]

1 голос
/ 14 января 2011

Вы должны создать событие и запустить его после обработки данных в событии Serial Data Received.При необходимости вы можете передать данные с пользовательскими аргументами событий.

Это код для вашей DLL:

public delegate void dllFinishedHandler(object sender, object tag);
    public event dllFinishedHandler DllFinished;
    protected virtual void OnDllFinished(object e)
    {
        if (DllFinished!= null)
            DllFinished(this, e);
    }

после реализации кода вы должны установить обработчик событий в своем приложении.

Приведенный ниже код передает объект в приложение.Вы можете использовать SerialDataReceivedEventArgs или ваш собственный обработчик событий, также он может выглядеть следующим образом:

 public delegate void dllFinishedHandler(object sender, SerialDataReceivedEventArgs eventArgs);
    public event dllFinishedHandler DllFinished;
    protected virtual void OnDllFinished(SerialDataReceivedEventArgs e)
    {
        if (DllFinished!= null)
            DllFinished(this, e);
    }

наследовать от EventArgs и использовать его в приведенном ниже коде вместо SerialDataReceivedEventArgs:

public class DllEventArgs : EventArgs
{
    private byte[] buffer;

    public byte[] Buffer
    {
        get
        {
            return buffer;
        }
    }

    public DllEventArgs(byte[] buff)
    {
        buffer = buff;
    }
}

тогда ваше приложение может достичь буфера (я думаю, его байта [] непосредственно из события).

0 голосов
/ 14 января 2011

Знаете ли вы, когда данные обрабатываются.Если да,

if(Processed != null)
 Processed(this, new EventArgs());

Событие Decalre в классе как

public event EventHandler Processed

Вы также можете передавать пользовательские аргументы события и использовать универсальный EventHandler

...