Проброс события из библиотеки C# .NET

216
30 сентября 2018, 04:20

Пишу простое приложение для захвата видеопотока с IPкамеры на винформах используя фреймворк AForge. Что бы код не был свалкой, вынес многие вещи в отдельную библиотеку, в том числе и захват видеопотока от камеры. Создал в классе библиотеки делегат и событие:

public event ImageWithDetectionChangedEventHandler CameraImageChanged;
public delegate void ImageWithDetectionChangedEventHandler(object sender, Bitmap img);

Так же метод для захвата:

public void CreateMjpegVideoStream(string url)
{        
    // Создаем MJPEG видео ресурс с удаленной камеры
    MJPEGStream stream = new MJPEGStream(url);
    // set event handlers
    stream.NewFrame += Video_NewFrame;
    stream.Start();
}

В этом методе подписался на событие:

private void Video_NewFrame(object sender, NewFrameEventArgs eventArgs)
{
    _bitmap = eventArgs.Frame; 
}

А вот как пробросить изменения уже в форму? Вот так хочу запустить поток

private void btnStart_Click(object sender, EventArgs e)
{
    _videoMaker.CreateMjpegVideoStream(tbEnteredUrl.Text);
    _videoMaker.CameraImageChanged += CameraServiceCameraImageChanged;
}

и здесь изменять содержимое PictureBox:

private void CameraServiceCameraImageChanged(object sender, Bitmap img)
{
    pbCameraStream.Image = img;
}

И чувствую, что поплыл, и не могу понять как это дело организовать. Буду благодарен за любую помощь!

Answer 1

Возможно вы имели ввиду получить доступ к контролу из другого потока? Установить ему Image можно так.

private void CameraServiceCameraImageChanged(object sender, Bitmap img)
{
var SetImage = new Action(() => { pbCameraStream.Image = img; });
            if (pbCameraStream.InvokeRequired)
                pbCameraStream.Invoke(SetImage);
            else
                SetImage();    
}
READ ALSO
Снятие ЭЦП на C# с xml

Снятие ЭЦП на C# с xml

Подскажите пожалуйста кто сталкивался со снятием ЭЦП на C#

234
Заменить Dictionary<Enum, ISomeClass> на IoC контейнер с DI

Заменить Dictionary<Enum, ISomeClass> на IoC контейнер с DI

Есть следующий код, который хранит в себе экземпляры, реализующих 1 интерфейс, классов и по запросу выдаёт нужный, в зависимости от ключа ( он тут...

194
Xamarin Android Native Binding Listeners ошибки

Xamarin Android Native Binding Listeners ошибки

Я пытаюсь заимплементить последнюю версию YandexMapkit в мой Xamarin

204
Кастомный StackPanel неверно отображается

Кастомный StackPanel неверно отображается

Делаю свой StackPanel с кнопкой для скрытия

226