如何在C#中的for每个循环期间发布事件?

时间:2019-04-04 02:49:36

标签: c# .net events delegates publish-subscribe

我有下面的代码将数据作为子类中的数据表获取。然后在foreach语句中使用某些if条件对数据进行排序。当满足if语句中的条件时,我需要通知订户这些更改。但是,如果一个条件在foreach语句中遇到,它会通知订阅者。然后,它在循环第一行后不会返回到循环。有谁知道该怎么做?

public class Data
{
    public string ID { get; set; }
    public string Description { get; set; }
}

public delegate void LogHandler(Data log);

public class ClsSub
{
    public event LogHandler OnDataRetrieved;

    public void LoadData()
    {
        DataTable dt = GetData();

        foreach (DataRow row in dt.Rows)
        {
            Data logdata = new Data();
              if (row["Description"].ToString().Contains("User found"))
                {
                 logdata.ID = row["UserID"].ToString();
                 logdata.Description = row["Description"].ToString();
                 }
               if (row["Description"].ToString().Contains("User not found"))
                {
                 logdata.ID = row["UserID"].ToString();
                 logdata.Description = row["Description"].ToString();
                 }

            if (OnDataRetrieved != null)
            {
                OnDataRetrieved(logdata);
            }
        }
    }

    private DataTable GetData()
    {
        var result = new DataTable();
        result.Columns.Add("UserID", typeof(string));
        result.Columns.Add("Description", typeof(string));
        result.Rows.Add("user1", "description1");
        result.Rows.Add("user2", "description2");
        return result;
    }
}

public class ClsMain
{
    public event LogHandler OnDataRetrieved;

    public void ReadData()
    {
        ClsSub sub = new ClsSub();
        sub.OnDataRetrieved += OnDataRetrieved;
        sub.LoadData();
    }
}

public class Program
{

    static void Main(string[] args)
    {
        ClsMain main = new ClsMain();
        main.OnDataRetrieved += ClsApplication_OnDataRetrieved;
        main.ReadData();
        Console.ReadKey();
    }

    private static void ClsApplication_OnDataRetrieved(Data log)
    {
        Console.WriteLine(log.ID + " " + log.Description);
    }
}

0 个答案:

没有答案