Как зарегистрировать обработчик событий один раз и вызвать событие в C#?
Я делаю загрузку массовых файлов через sftp Rebex. Поскольку я получал исключение из памяти для большого объема файлов , обновлял код по мере необходимости, и проблема дублирования была исправлена путем регистрации и незарегистрированной обработки событий во время каждого процесса цикла. Я хочу зарегистрировать обработчик событий один раз и вызвать его без регистрации и отмены регистрации во время каждого цикла
Что я уже пробовал:
Основной код выглядит следующим образом:
private List<SFTPFile> ListInwardCBFiles() { _listSftp = new Sftp(); SFTPFile objSFTPFile; List<SFTPFile> ListSFTPFile = new List<SFTPFile>(); try { if (ConnectSftp(_listSftp)) { foreach (InwardMessageType t in Enum.GetValues(typeof(InwardMessageType))) { foreach (CBExtension r in Enum.GetValues(typeof(CBExtension))) { var listItemReceived = new SftpListItemReceivedEventHandler((s, e) => { SftpItem item = e.Item; objSFTPFile = new SFTPFile(); objSFTPFile.FileType = Enum.GetName(typeof(InwardMessageType), t); objSFTPFile.Extension = Enum.GetName(typeof(CBExtension), r); objSFTPFile.Status = SFTPStatus.L.ToString(); objSFTPFile.FileName = item.Name.Trim(); objSFTPFile.FileSize = item.Size; objSFTPFile.Mode = SFTPMode.D.ToString(); objSFTPFile.BankCode = Common.BANKCODE; ListSFTPFile.Add(objSFTPFile); Common.WriteLog(MethodInfo.GetCurrentMethod().Name + " FileType: " + objSFTPFile.FileType + " FileName: " + objSFTPFile.FileName, ServiceThread.Listing.ToString()); e.Ignore(); }); _listSftp.ListItemReceived += listItemReceived; //register _listSftp.GetList(GetSFTPServerPath(Enum.GetName(typeof(InwardMessageType), t)) + "//" + "*." + Enum.GetName(typeof(CBExtension), r)); _listSftp.ListItemReceived -= listItemReceived; //unregister } } } } catch (Exception ex) { Common.WriteLog("Exception while listing files in the folder " + Environment.NewLine + ex.Message, ServiceThread.Listing.ToString()); } finally { DisConnectSftp(_listSftp); } return ListSFTPFile; } #endregion