Step 1 : Declare a delegate.
Step 2 : Create a class derived from System.EventArgs to encapsulate the event information.
Step 3 : Create the class that will raise the event. This class will have :
a) an event which will have the registered clients
b) a method to notify registered clients.
Step 4 : Create a client class. This class will have a method that matches the signature of the delegate. This method will receive the event.
Step 5 : Register this method with the event as being the authorized listener for the event.
Sample Code:
Step1: declare the delegate
public delegate void FileFoundHandler(Object sender, FileFoundEventArgs e);
Step2:create a class derived from System.EventArgs
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
namespace MyTool
{
class FileFoundEventArgs : EventArgs
{
private FileInfo fi;
private int counter;
public FileInfo FoundFile
{
get { return fi; }
}
public long CurrentCount
{
get { return counter; }
}
public FileFoundEventArgs(FileInfo fileinfo, int counterinfo)
{
fi = fileinfo;
counter = counterinfo;
}
}
}
Step3-a: define your event
public event FileFoundHandler FileFound;
Step3-b:define your methods which notifies the client(s)
protected virtual void OnFileFound(FileInfo e)
{
if (FileFound != null)
{
//despatch the event to each client
_count1++;
FileFound(this, new FileFoundEventArgs(e, _count1));
}
}
Step4: client class
namespace MyTool
{
public partial class NBDocChecker : Form
{
private List<FileInfo> objFiles = null;
public NBDocChecker()
{
InitializeComponent();
}
..................
.............
Step5: hook the event to the listener method
FileFormater formater = new FileFormater(chc, this.txtPath.Text);
//register the listener method
formater.FileFound += new FileFormater.FileFoundHandler(formater_FileFound);
// register the listener method definition
void formater_FileFound(object sender, FileFoundEventArgs e)
{
//throw new Exception("The method or operation is not implemented.");
MyTool.CommonDelegate.RefreshUIHandler rdg=new MyTool.CommonDelegate.RefreshUIHandler(this.updateUI);
this.Invoke(rdg, new Object[] { e.FoundFile.FullName, e.CurrentCount.ToString() });
}
using
System;
using
System.Collections.Generic;
using
System.Text;
using
System.IO;
using
Microsoft.Office.Interop.Excel;
using
System.Runtime.InteropServices;
using
log4net;
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
namespace
MyTool
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
class FileFormater
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
//private string _path;
//private string _pattern = "*.xls";
//private bool _recursive = true;
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
/**/////private bool _removeReadOnly = true;
private string _path = string.Empty;
CheckCondition checkSpec = null;
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
private List<FileInfo> pendingFiles = new List<FileInfo>();
public List<FileInfo> ResultFiles
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
get ...{ return pendingFiles; }
}
private int _count1 = 0;
private int _count2 = 0;
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
//private ILog logger = null;
private ConfigHelper config = new ConfigHelper();
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7ff8d92cded7e0ce15e7ca1acc870052.gif)
"Delegate Declaration"#region "Delegate Declaration"
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
//declare delegate
public delegate void FileFoundHandler(Object sender, FileFoundEventArgs e);
public delegate void FileFoundEndHandler(Object sender, int total);
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
public delegate void FileFormatedHandler(object sender, FileFormatedEventArgs e);
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
#endregion
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7ff8d92cded7e0ce15e7ca1acc870052.gif)
"Events"#region "Events"
//declare event
public event FileFoundHandler FileFound;
public event FileFoundEndHandler FileFondEnd;
public event FileFormatedHandler FileFormated;
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
#endregion
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
//delcare the methods which notify the clients
protected virtual void OnFileFound(FileInfo e)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
if (FileFound != null)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
//despatch the event to each client
_count1++;
FileFound(this, new FileFoundEventArgs(e, _count1));
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
}
protected virtual void OnFileFoundEnd()
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
if (FileFondEnd != null)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
FileFondEnd(this, _count1);
}
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
protected virtual void OnFileFormated(FileInfo e)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
if (FileFormated != null)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
_count2++;
FileFormated(this, new FileFormatedEventArgs(e, _count2));
}
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
public FileFormater(CheckCondition condition, string path)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
if (condition == null) throw new ArgumentNullException("no condition specified");
checkSpec = condition;
_path = path;
pendingFiles.Clear();
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
public FileFormater()
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
public List<FileInfo> FormatFiles()
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
pendingFiles = GetFiles(_path, checkSpec.SearchPattern, checkSpec.Isrecursive);
OnFileFoundEnd();
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
foreach (FileInfo item in pendingFiles)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
if (Globals.Cancled)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
return pendingFiles;
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
}
processExcelFile(item);
OnFileFormated(item);
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
}
clearUp();
//process file format
return pendingFiles;
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
//get all files need to be formated
public List<FileInfo> GetFiles(string path, string pattern, bool recursive)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
List<FileInfo> resultFiles = new List<FileInfo>();
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
DirectoryInfo baseDir = new DirectoryInfo(path);
if (Globals.Cancled)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
//write log
return resultFiles;
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
try
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
if (recursive)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
foreach (DirectoryInfo di in baseDir.GetDirectories())
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
GetFiles(di.FullName, pattern, recursive);
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
}
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
//search files matched pattern
FileInfo[] files = baseDir.GetFiles(pattern);
foreach (FileInfo fi in files)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
if (Globals.Cancled)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
//write log
return resultFiles;
}
//raise filefound event
OnFileFound(fi);
}
resultFiles.AddRange(files);
pendingFiles.AddRange(files);
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
return pendingFiles;
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
}
catch (Exception ex)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
System.Diagnostics.Debug.WriteLine(ex.Message);
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
return pendingFiles;
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel.Workbook wb = null;
object missing = System.Reflection.Missing.Value;
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
private FileInfo processExcelFile(FileInfo file)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
if (file.IsReadOnly)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
File.SetAttributes(file.FullName, FileAttributes.Normal);
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
try
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
string pwd = config.OpenPWD;
try
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
wb = excel.Workbooks.Open(file.FullName, missing, false, missing, pwd, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing);
}
catch
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
Marshal.ReleaseComObject(wb);
excel.Quit();
Marshal.ReleaseComObject(excel);
excel = new Microsoft.Office.Interop.Excel.Application();
wb = excel.Workbooks.Open(file.FullName, missing, false, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing);
}
//set active sheet and active cell of sheet
if (checkSpec.IsPagesetup)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
if (file.Name.IndexOf("夋柺崁栚掕媊彂") >= 0)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
for (int i = wb.Sheets.Count ; i >= 1; i--)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
//((_Worksheet)xls).Activate();
_Worksheet sheet = (_Worksheet)wb.Worksheets[i];
sheet.Activate();
Microsoft.Office.Interop.Excel.Range range = sheet.get_Range("A1", "A1");
range.Select();
//apply page setting
if (sheet.Name.IndexOf("夋柺Event掕媊") < 0) continue;
sheet.PageSetup.LeftMargin = excel.InchesToPoints(Convert.ToDouble(config.LeftMargin));
sheet.PageSetup.RightMargin = excel.InchesToPoints(Convert.ToDouble(config.RightMargin));
sheet.PageSetup.TopMargin = excel.InchesToPoints(Convert.ToDouble(config.TopMargin));
sheet.PageSetup.BottomMargin = excel.InchesToPoints(Convert.ToDouble(config.ButtomMargin));
sheet.PageSetup.HeaderMargin = excel.InchesToPoints(Convert.ToDouble(config.HeaderMargin));
sheet.PageSetup.FooterMargin = excel.InchesToPoints(Convert.ToDouble(config.FooterMargin));
sheet.PageSetup.Orientation = config.Orientation;
sheet.PageSetup.CenterHorizontally = config.CenterHorizontally;
sheet.PageSetup.CenterVertically = config.CenterVertically;
sheet.PageSetup.Zoom = config.Zoom;
excel.ActiveWindow.View = XlWindowView.xlPageBreakPreview;
excel.ActiveWindow.DisplayGridlines = true;
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
}
else
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
for (int i = wb.Sheets.Count; i >= 1; i--)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
//((_Worksheet)xls).Activate();
_Worksheet sheet = (_Worksheet)wb.Worksheets[i];
sheet.Activate();
Microsoft.Office.Interop.Excel.Range range = sheet.get_Range("A1", "A1");
range.Select();
//apply page setting
sheet.PageSetup.LeftMargin = excel.InchesToPoints(Convert.ToDouble(config.LeftMargin));
sheet.PageSetup.RightMargin = excel.InchesToPoints(Convert.ToDouble(config.RightMargin));
sheet.PageSetup.TopMargin = excel.InchesToPoints(Convert.ToDouble(config.TopMargin));
sheet.PageSetup.BottomMargin = excel.InchesToPoints(Convert.ToDouble(config.ButtomMargin));
sheet.PageSetup.HeaderMargin = excel.InchesToPoints(Convert.ToDouble(config.HeaderMargin));
sheet.PageSetup.FooterMargin = excel.InchesToPoints(Convert.ToDouble(config.FooterMargin));
sheet.PageSetup.Orientation = config.Orientation;
sheet.PageSetup.CenterHorizontally = config.CenterHorizontally;
sheet.PageSetup.CenterVertically = config.CenterVertically;
sheet.PageSetup.Zoom = config.Zoom;
excel.ActiveWindow.View = XlWindowView.xlPageBreakPreview;
excel.ActiveWindow.DisplayGridlines = true;
}
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
}
finally
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
if (wb != null)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
//if (!wb.HasPassword)
wb.Password = config.OpenPWD;
wb.Save();
wb.Close(true, false, missing);
Marshal.ReleaseComObject(wb);
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
}
if (excel != null)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
excel.Quit();
GC.Collect();
}
}
return file;
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
private void clearUp()
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
if (excel != null)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
excel.Quit();
Marshal.ReleaseComObject(excel);
GC.WaitForPendingFinalizers();
GC.Collect();
}
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
}
}
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)