Использование backgroundworker для обработки потоков данных с событиями в WinForms - PullRequest
0 голосов
/ 21 февраля 2011

У меня возникли проблемы в C #.Я очень плохо знаком с событиями в C #, поэтому мне сложно представить глобальное решение моей проблемы.Я должен сделать WinForm, чтобы собрать данные из LabJackDriver и построить их график.У меня есть готовый компонент графика, поэтому моя проблема в том, как сделать основы.

Я искал здесь несколько решений и нашел это .Я пытаюсь найти какое-то решение таким образом.

Не могли бы вы дать несколько шагов, как его запустить?Я должен реализовать следующий интерфейс:

public interface IStream {
    event StreamingDataArriveEventDelegate StreamingDataArrive;
    event StreamingStateChangeEventDelegate StreamingStateChange;

    void addAnalogPort(int portId);
    ISensorSource getSensorSource(int portId);

    void Start();
    void Stop();
    void Close();
}

Заранее спасибо,

Pedro D

1 Ответ

1 голос
/ 21 февраля 2011

Итак, вы начинаете с создания класса, который реализует интерфейс, например:

public class MyClass : IStream
{
    public event StreamingDataArriveEventDelegate StreamingDataArrive;

    public event StreamingStateChangeEventDelegate StreamingStateChange;

    public void addAnalogPort(int portId)
    {
        throw new NotImplementedException();
    }

    public ISensorSource getSensorSource(int portId)
    {
        throw new NotImplementedException();
    }

    public void Start()
    {
        throw new NotImplementedException();
    }

    public void Stop()
    {
        throw new NotImplementedException();
    }

    public void Close()
    {
        throw new NotImplementedException();
    }
}

Замените все throw new NotImplementedException(); на соответствующий код.

Это по-прежнему не имеет большого отношения к событиям,Я полагаю, вам также нужно знать, как вызвать событие.

Если вы наберете MyClass, когда вам нужно уведомить пользователя о поступлении данных, вы запускаете событие SteamingDataArrive, например:

if (StreamingDataArrive != null)
    StreamingDataArrive(this, new StreamingDataEventArgs("data"));

или какова ваша подпись делегата.

Чтобы прослушать одно и то же событие, вы подписываете событие на обработчик

MyClass myClass = new MyClass();
myClass.StreamingDataArrive += new StreamingDataArriveEventDelegate(myClass_StreamingDataArrive);

и создаете обработчик

void myClass_StreamingDataArrive(object Sender, StreamingDataEventArgs eventArgs)
{
    throw new NotImplementedException();
}

вам может потребоваться изменить StreamingDataEventArgs для соответствия вашей подписи делегата.

...