Я работаю над проектом Kinect. Я записываю данные из полученных кадров. Когда мне приходится обрабатывать данные кадра, программа занимает много времени. Тем временем я хочу отключить обработчик событий MultiSourceFrameArrived.
Дело в том, что я читал разные сообщения, я не могу найти ответ, который соответствует моей проблеме. Выражение -=
работает, только если оно находится в той же области видимости, что и выражение +=
. Когда я пишу их в разных областях, кадры все еще поступают, и я не могу отключить этот обработчик событий.
НЕРАБОТАЮЩИЙ код:
private void MainWindow()
{
//Intitalize components
if (this.multiSourceFrameReader != null)
{
EnableFrameArrived();
}
}
private void MultiSourceFrameReader_MultiSourceFrameArrived(object sender, MultiSourceFrameArrivedEventArgs e)
{
DisableFrameArrived();
}
private void DisableFrameArrived()
{
this.multiSourceFrameReader.MultiSourceFrameArrived -= this.MultiSourceFrameReader_MultiSourceFrameArrived;
//This doesn`t cancel my suscription to the event.
}
private void EnableFrameArrived()
{
this.multiSourceFrameReader.MultiSourceFrameArrived += MultiSourceFrameReader_MultiSourceFrameArrived;
}
РАБОЧИЙ код:
private void MainWindow()
{
//Intitalize components
if (this.multiSourceFrameReader != null)
{
this.multiSourceFrameReader.MultiSourceFrameArrived += this.MultiSourceFrameReader_MultiSourceFrameArrived;
//I subscribe to the event
}
this.multiSourceFrameReader.MultiSourceFrameArrived -= this.MultiSourceFrameReader_MultiSourceFrameArrived;
//I cancel my subscription. But I need to cancel my subscription in another scope.
}
Я прокомментировал остальную часть кода и просто оставил эту часть работающей. Я продолжаю получать входящие кадры, даже несмотря на то, что метод отключения достигнут. Почему отмена моего мероприятия возможна только в том случае, если я нахожусь в той же области? Я читаю разные блоги, но не могу решить эту проблему.
Какие-либо предложения? Спасибо!
EnableFrameArrived()
? Эта вещь&& flag
не является потокобезопасной (хотя, вероятно, она должна работать только в потоке пользовательского интерфейса). - person Thomas Weller   schedule 11.02.2020EnableFrameArrived()
в функциюMainWindow()
. Когдаthis.multiSourceFrameReader.MultiSourceFrameArrived += this.MultiSourceFrameReader_MultiSourceFrameArrived
находится в той же области, что иthis.multiSourceFrameReader.MultiSourceFrameArrived -= this.MultiSourceFrameReader_MultiSourceFrameArrived;
, они работают нормально. Но когда они не находятся в одной области, метод отключения-=
не работает. Я думаю, что это проблема с лямбда-вызовом, но я не знаю, как ее решить. - person Magali Sganga   schedule 12.02.2020