首页 / C# / c#在函数完成时订阅一个事件?
c#在函数完成时订阅一个事件?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c#在函数完成时订阅一个事件?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1934字,纯文字阅读大概需要3分钟。
内容图文
![c#在函数完成时订阅一个事件?](/upload/InfoBanner/zyjiaocheng/782/802a4987641a4ddc9e87034a8246a1a6.jpg)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp13
{
class Program
{
public class Subscriber
{
public static void Main()
{
Publisher publisher = new Publisher();
publisher.BeginAdd += AddCallback;
publisher.EndAdd += EndCallBack;
Console.WriteLine(publisher.Multiply(2.3f, 4.5f));
publisher.BeginAdd -= AddCallback;
publisher.EndAdd -= EndCallBack;
Console.WriteLine(publisher.Multiply(3.3f, 4.4f));
Console.ReadLine();
}
public static void AddCallback(string message)
{
Console.WriteLine("Callback - " + message);
}
public static void EndCallBack(string message)
{
Console.WriteLine("Callback - " + message);
}
}
public class Publisher
{
public delegate void Notify(string message); // Declare delegate.
public event Notify BeginAdd; // Declare event.
public event Notify EndAdd;
public float Multiply(float a, float b)
{
OnBeginAdd(); // Raise event.
OnEndAdd();
return a * b;
}
private void OnBeginAdd()
{
if (BeginAdd != null)
BeginAdd("Starting multiplication!"); // Call callback method.
}
private void OnEndAdd()
{
if (EndAdd != null)
EndAdd("Completing multiplication!");
}
}
}
}
如何更正添加OnEndAdd()的语法;进入Multiply函数,以便它只在函数完成后进行回调?我已经尝试在return语句之后添加它,但显然不起作用,似乎无法找到另一种方式……
解决方法:
一旦Multiply函数返回,控件就会远离发布者,因此这里需要进行一些设计更改.
你可能意味着完成乘法运算(而不是整个函数调用),下面的改变就足够了.
public float Multiply(float a, float b)
{
OnBeginAdd();
var result = a * b;
OnEndAdd();
}
一个更漂亮(tm)的方法可能是创建另一个类,例如IDisposable类型的OperationScope,它为您调用OnBeginAdd / OnEndAdd – 例如:
public float Multiply(float a, float b)
{
using (new OperationScope(this)) //This is IDisposable and calls OnBeginAdd & OnEndAdd
{
return a * b;
}
}
注意:可能有其他类似的方法,而不是使用IDisposable类,如传递Func< xyz>它实际工作(乘)到另一个调用OnBeginAdd / OnEndAdd的方法.
内容总结
以上是互联网集市为您收集整理的c#在函数完成时订阅一个事件?全部内容,希望文章能够帮你解决c#在函数完成时订阅一个事件?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。