I have Winform application and I want to separate the button click event from the main form.My application has Add button which adds files into my Listbox and until now all my code was inside this button click event and caused my code to look complicated.So I created this class:public class ListboxFile{    public delegate void OnFileAdd(string file);    public event OnFileAdd OnFileAddEvent;    private static List<string> _files;    public ListboxFile()    {        _files = new List<string>();    }    public void add(string file)    {        _files.Add(file);        OnFileAddEvent(file);    }    public void remove(string file)    {        if (_files.Contains(file))        {            _files.Remove(file);        }    }    public void clear()    {        _files.Clear();    }    public List<string> list    {        get { return _files; }    }}in the constructor I am initiate my List and each file that comes and add to my List raise an event and from the main form this file also add to my Listboxthis is the event from the main form that responsible to add the file into the Listbox:private void lbf_OnFileAddEvent(string file){    if (InvokeRequired)    {        this.Invoke((MethodInvoker)delegate        {                                listBoxFiles.Items.Add(file);        });    }    else    {        listBoxFiles.Items.Add(file);    }}and this is the Add button click that takes the files that the user chooses to add:    private void btnAddfiles_Click(object sender, EventArgs e)    {        string fileToAdd = string.Empty;        System.IO.Stream stream;        OpenFileDialog thisDialog = new OpenFileDialog();        thisDialog.InitialDirectory = (lastPath.Length > 0 ? lastPath : c:\\);        thisDialog.Filter = (*.snoop, *.pcap, *.cap, *.net, *.pcapng, *.5vw, *.bfr, *.erf, *.tr1) +            |*.snoop; *.pcap; *.cap; *.net; *.pcapng; *.5vw; *.bfr; *.erf; *.tr1| + All files (*.*)|*.*;        thisDialog.FilterIndex = 1;        thisDialog.RestoreDirectory = false;        thisDialog.Multiselect = true;        thisDialog.Title = Please Select Source File;        if (thisDialog.ShowDialog() == DialogResult.OK)        {            if (thisDialog.FileNames.Length > 0)            {                lastPath = Path.GetDirectoryName(thisDialog.FileNames[0]);            }            ListboxFile lbf = new ListboxFile();            lbf.OnFileAddEvent += lbf_OnFileAddEvent;            BackgroundWorker backgroundWorker = new BackgroundWorker();            backgroundWorker.WorkerReportsProgress = true;            backgroundWorker.DoWork +=            (s3, e3) =>            {                foreach (String file in thisDialog.FileNames)                {                    try                    {                        if ((stream = thisDialog.OpenFile()) != null)                        {                            int numberOfFiles = thisDialog.SafeFileNames.Length;                            using (stream)                            {                                lbf.add(file); //add the file                                lastPath = Path.GetDirectoryName(thisDialog.FileNames[0]);                            }                        }                    }                    catch (Exception ex)                    {                        MessageBox.Show(Error: Could not read file from disk. Original error:  + ex.Message);                    }                }            };            backgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(                (s3, e3) =>                {                    updateUi(bla bla); //update the gui                });            backgroundWorker.RunWorkerAsync();        }    }Would love to hear comments about this design since I am new developer.
Class design question
c#;winforms