我正在创建一个类库的方法,例如,OnetoTen(),它基本上是一个for循环计数从1到10.我想要实现的是调用此方法从另一个程序,并让它输出for循环当前所处的数字/迭代。方法返回循环的进度
使用代表/事件的正确方法是什么?
我正在创建一个类库的方法,例如,OnetoTen(),它基本上是一个for循环计数从1到10.我想要实现的是调用此方法从另一个程序,并让它输出for循环当前所处的数字/迭代。方法返回循环的进度
使用代表/事件的正确方法是什么?
您可以使用回调(委托)或事件。
示例使用回调:
class Program
{
static void Main(string[] args)
{
var counter = new Counter();
counter.CountUsingCallback(WriteProgress);
Console.ReadKey();
}
private static void WriteProgress(int progress, int total){
Console.WriteLine("Progress {0}/{1}", progress, total);
}
}
public class Counter
{
public void CountUsingCallback(Action<int, int> callback)
{
for (int i = 0; i < 10; i++)
{
System.Threading.Thread.Sleep(1000);
callback(i + 1, 10);
}
}
}
示例使用事件: “正是利用委托/事件以正确的方式去”
class Program
{
static void Main(string[] args)
{
var counter = new Counter();
counter.ProgessTick += WriteProgress;
counter.CountUsingEvent();
Console.ReadKey();
}
private static void WriteProgress(int progress, int total){
Console.WriteLine("Progress {0}/{1}", progress, total);
}
}
public class Counter
{
public event Action<int, int> ProgessTick;
public void CountUsingEvent()
{
for (int i = 0; i < 10; i++)
{
System.Threading.Thread.Sleep(1000);
if (ProgessTick != null)
ProgessTick(i + 1, 10);
}
}
}
谢谢,但是我应该什么时候选择哪个变体?有没有任何指导方针? – KnorxThieus
在这种情况下,我宁愿回调。我认为,如果您不知道您是否会有多少用户,那么事件会更好。这个例子看起来总是只有一件事需要通知。 –
非常感谢! – KnorxThieus
- 它可能是,取决于你真正的意思是“有输出”。请注意,“输出”可能意味着很多不同的事情:显示到控制台,更新屏幕上的文本,写入文件等。您已经收到一个答案,演示使用委托,作为显式回调对象和作为事件订阅者(事件只是一个抽象成员,允许将委托实例添加到回调代理链中)。如果这不是你想要的,你需要更清楚明确地写出你的问题。 –
彼得,感谢您的反馈,我一定会把它带上! – LuxC