Как опубликовать событие во время каждого цикла в C #? - PullRequest
0 голосов
/ 04 апреля 2019

У меня есть приведенный ниже код, который получает данные как данные в подклассе. Затем я отсортировал данные по некоторым условиям if в выражении foreach. Мне нужно сообщить об изменениях, когда оно выполнило условие в условии 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);
    }
}
...