Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
取消注册事件处理程序以防止c#Unity中的多次回调_C#_Unity3d - Fatal编程技术网

取消注册事件处理程序以防止c#Unity中的多次回调

取消注册事件处理程序以防止c#Unity中的多次回调,c#,unity3d,C#,Unity3d,每次我调用方法subscribe事件处理程序时。所以它被多次调用,因为我没有取消订阅事件处理程序。如何正确地取消订阅事件处理程序,以防止多次回调onComplete public void DoTheAction(Action<bool> onComplete = null) { if (rewardBasedVideo.IsLoaded()) { rewardBasedVideo.Show(); rewardBased

每次我调用方法subscribe事件处理程序时。所以它被多次调用,因为我没有取消订阅事件处理程序。如何正确地取消订阅事件处理程序,以防止多次回调onComplete

public void DoTheAction(Action<bool> onComplete = null) {
        if (rewardBasedVideo.IsLoaded()) {
            rewardBasedVideo.Show();
            rewardBasedVideo.OnAdRewarded += (sender, args) => {
                onComplete(true);
            };
        } 
    }
public void DoTheAction(Action onComplete=null){
if(rewardBasedVideo.IsLoaded()){
rewardBasedVideo.Show();
rewardBasedVideo.OnAndwarded+=(发送方,参数)=>{
未完成(正确);
};
} 
}

您可能需要考虑重构代码,这样您就不会有这个问题,但这就是如何实现您的要求的方法

public void DoTheAction(Action<bool> onComplete = null)
    {
        if (rewardBasedVideo.IsLoaded())
        {
            rewardBasedVideo.Show();
            rewardBasedVideo.OnAdRewarded -= HandleOnAdRewarded;
            rewardBasedVideo.OnAdRewarded += HandleOnAdRewarded;    
        }
    }

    private void HandleOnAdRewarded(object sender, EventArgs e)
    {
        onComplete(true);
    }
public void DoTheAction(Action onComplete=null)
{
if(rewardBasedVideo.IsLoaded())
{
rewardBasedVideo.Show();
基于奖赏的视频-未经奖赏的-=未经奖赏的视频;
基于奖励的视频ONADREWARD+=HandleOnADREWARD;
}
}
私有无效HandleOnAddressed(对象发送方,事件参数e)
{
未完成(正确);
}

名称“onComplete”在当前上下文中不存在?哦,糟糕。我认为您需要重构,以便可以在
handleonardwarded
@AsimKrishnaDas中访问
onComplete
。答案是使用事件处理程序的方法,而不是匿名委托。你没有提供足够的代码让别人能够为你重构它。所以,现在你需要弄清楚如何在你的环境中使这个解决方案起作用。谢谢老板的建议。因为我不是c语言的专家,无法从另一个方法调用onComplete。你能给我一个链接让我更好的理解吗?非常感谢如果你能为我编辑你的答案。再次感谢你。