Morfeey
@Morfeey

Почему не работает событие?

Имеем класс, в котором при проверке файла на "занятость" отбрасывается событие, в которое передается некое кол-во параметров. Делаю вот так:
public class Baza
    {
        public string Directory;
        public string LastDir;
        private string[] ListFiles = null;
        private List<string> FilesNotBussy = new List<string>();
        private List<string> FilesBussy = new List<string>();
        private string Pattern = null;

        public delegate void FileCheck(string FileName, int Iteration, int Count);
        public event FileCheck onCheck = delegate { };

        public void BackUP() {


        }

        public string[] GetListFiles() {          
            return this.ListFiles;
        }
        private bool FileIsBusy(string file)
        {
            bool result = false;
            try
            {
                using (var fs = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.None))
                {
                    result = false;
                }
            }
            catch (Exception ex)
            {
                result = true;
            }
            return result;
        }

        public List<string> GetListFilesNotBussy()
        {
            return this.FilesNotBussy;
        }

        public List<string> GetListFilesBussy()
        {
            return FilesBussy;
        }


        public Baza(string Item, string Pattern = "*") {
            Directory = Item;
            LastDir = Item.GetLastDir();
            this.Pattern = Pattern;
            this.ListFiles = System.IO.Directory.GetFiles(Directory, Pattern, SearchOption.AllDirectories);

            int i = 0;
            foreach (string file in ListFiles)
            {
                onCheck( file, i, Count() );
                if (FileIsBusy(file))
                {
                    FilesBussy.Add(file);
                }
                else
                {
                    FilesNotBussy.Add(file);
                }
                i++;
            }
        }

        public int Count() {
            return this.ListFiles.Count();
        }   
    }

Объекты класса заполняются циклом в отдельном от потоке, в этом же цикле я и подписываюсь на это событие:
Item.onCheck += (fileName, iternation, Count) =>
                    {
                        Dispatcher.Invoke((Action)(delegate
                        {
                            this.CheckFile.Text = fileName;
                            this.CheckFileProgress.Maximum = Count;
                            this.CheckFileProgress.Value = i;
                        }));
                        Bases.Log(fileName + "  " + iternation + "  " + Count);
                    };


Результата нуль. Где я поступаю не правильно ?
  • Вопрос задан
  • 125 просмотров
Пригласить эксперта
Ответы на вопрос 1
@FreeDobby
Свободный Добби
Попробуй убрать "onCheck = delegate { };" , а вызывай его с проверкой "onCheck?.Invoke(file, i, Count());"
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы