如何注册事件处理程序一次并在C#中调用事件?

编程入门 行业动态 更新时间:2024-10-26 18:21:23
本文介绍了如何注册事件处理程序一次并在C#中调用事件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我正在通过sftp Rebex下载批量文件。由于我因大量文件而出现内存不足异常,因此根据需要更新了代码,并通过在每个循环过程中注册和取消注册事件处理来纠正所看到的重复问题。我想注册一次事件处理程序并在每次循环期间调用它而不注册和取消注册 我尝试过: 核心代码如下:

I am doing downloading of bulk files via sftp Rebex. Since I was getting out of memory exception for large volume of files , updated the code as required and duplication issue seen was rectified by registering and unregistered the event handling during each loop process. I want to to register event handler once and invoke the same without registering and unregistering during each loop What I have tried: Core Code is as below:

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

推荐答案

为什么不使用布尔标志确定是否需要执行 listItemReceived()方法中的代码,然后只需要注册一次事件处理程序。 Why don't you just use a Boolean flag that determines if the code in your listItemReceived() method needs to be executed, then you only need to register the event handler once.

更多推荐

如何注册事件处理程序一次并在C#中调用事件?

本文发布于:2023-11-09 15:06:09,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1572685.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:事件   并在   程序

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!