C# MultisourceFrameArrized-=不工作。如何禁用它?
我正在从事Kinect项目。我正在记录接收到的帧的数据。当我必须处理帧数据时,程序占用了很多时间。同时,我想禁用EventHandler MultiSourceFrameArrived 问题是,我一直在读不同的帖子,我找不到适合我问题的答案。表达式C# MultisourceFrameArrized-=不工作。如何禁用它?,c#,kinect,kinect-v2,C#,Kinect,Kinect V2,我正在从事Kinect项目。我正在记录接收到的帧的数据。当我必须处理帧数据时,程序占用了很多时间。同时,我想禁用EventHandler MultiSourceFrameArrived 问题是,我一直在读不同的帖子,我找不到适合我问题的答案。表达式-=似乎只有在与表达式+=在同一范围内时才起作用。当我在不同的作用域中写入它们时,帧仍在到达,我无法禁用该事件处理程序 非工作代码如下所示: private void MainWindow() { //Intitalize components
-=
似乎只有在与表达式+=
在同一范围内时才起作用。当我在不同的作用域中写入它们时,帧仍在到达,我无法禁用该事件处理程序
非工作代码如下所示:
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.
}
工作代码如下:
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.
}
我对代码的其余部分进行了注释,只是让这部分继续运行。即使达到禁用方法,我仍会继续输入帧。为什么只有我在同一范围内才能取消我的活动?我读过不同的博客,但我不能解决这个问题
有什么建议吗?
谢谢 调用了多少次
enableframearived()
?&&flag
不是线程安全的(尽管它可能只在UI线程上运行)。在这段代码中只有一次。在MainWindows中加载()。我的主要想法是在完成处理后再次调用它,但我无法使DisableFrameArrized()工作,因为帧仍在到达。我询问了国旗的情况,以检查它是否是第一次被呼叫。好吧,谢谢托马斯的回答。我检查了你的意思,然后我修改了密码。我将enableframearived()
放在main window()
函数中。当this.multiSourceFrameReader.multisourceframearrized+=this.multiSourceFrameReader\u multisourceframearrized
与this.multiSourceFrameReader.multisourceframearrized-=this.multiSourceFrameReader\u multisourceframearrized在同一范围内时代码>它们工作得很好。但是,当它们不在同一范围内时,禁用方法-=
不起作用。我认为lambda调用有问题,但我不知道如何解决。你说问题在于“lambda调用”,但你的程序片段中没有lambda。如果您的事件处理程序是lambda而不是方法组,那么您确实会遇到这个问题。您能显示出现问题的实际代码吗?