取消注册事件处理程序以防止c#Unity中的多次回调
每次我调用方法subscribe事件处理程序时。所以它被多次调用,因为我没有取消订阅事件处理程序。如何正确地取消订阅事件处理程序,以防止多次回调onComplete取消注册事件处理程序以防止c#Unity中的多次回调,c#,unity3d,C#,Unity3d,每次我调用方法subscribe事件处理程序时。所以它被多次调用,因为我没有取消订阅事件处理程序。如何正确地取消订阅事件处理程序,以防止多次回调onComplete public void DoTheAction(Action<bool> onComplete = null) { if (rewardBasedVideo.IsLoaded()) { rewardBasedVideo.Show(); rewardBased
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。你能给我一个链接让我更好的理解吗?非常感谢如果你能为我编辑你的答案。再次感谢你。