Вы можете использовать обратный вызов (делегат) или событие.
Пример использования обратного вызова:
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);
}
}
}
- это может быть, в зависимости от того, что вы на самом деле имеете в виду, «сделайте вывод». Обратите внимание, что «вывод» может означать много разных вещей: отображение на консоли, обновление текста на экране, запись в файл и т. Д. Вы уже получили ответ, демонстрирующий использование делегатов, как явного объекта обратного вызова, так и как (событие - это просто абстрактный элемент, позволяющий добавить экземпляр делегата в цепочку делегатов обратного вызова). Если это не то, что вы хотите, вам нужно написать свой вопрос более четко и конкретно. –
Питер, спасибо за ваши отзывы, я обязательно возьму это на борту! – LuxC