FORM1 CODE
private void button1_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2(this);
form2.OnMyForm2Event += AddToListViewByListeningToEvent;
form2.Show();
}
public void AddToListUsingPublicProperty(string item)
{
listBox1.Invoke(new MethodInvoker(() =>
{
listBox1.Items.Add(item);
}));
}
private void AddToListViewByListeningToEvent(object sender, MyEventArgs e)
{
listBox1.Invoke( new MethodInvoker( () =>
{
listBox1.Items.Add(e.EventData);
}));
}
------------------------------------------------------------------------
FORM2 CODE
-------------------------------------------------------------------------------
public partial class Form2 : Form
{
public event EventHandler<myeventargs> OnMyForm2Event;
BackgroundWorker _bw = new BackgroundWorker();
public Form1 _Form1;
public Form2()
{
InitializeComponent();
}
public Form2(Form1 form1)
{
InitializeComponent();
this._Form1 = form1;
_bw.DoWork += DoBackgroundWork;
_bw.RunWorkerCompleted += OnRunWorkerCompleted;
}
#region BackgroundWorker
private void btnUsingBackgroundWorker_Click(object sender, EventArgs e)
{
_bw.RunWorkerAsync();
}
private void DoBackgroundWork(object sender, DoWorkEventArgs e)
{
//Do some heavy duty operations
if (OnMyForm2Event != null)
OnMyForm2Event(this, new MyEventArgs("ItemFromForm2UsingBGThread"));
//Add item by calling public property on Form1
_Form1.AddToListUsingPublicProperty("ItemAddedDirectlyByCallingPublicMethod-BackGroundWorker");
}
private void OnRunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
_Form1.AddToListUsingPublicProperty("ItemAddedWhenBackgroundworkerFinisheswork");
}
#endregion
#region Thread
private void btnUpdateUsingThread_Click(object sender, EventArgs e)
{
Thread t = new Thread(PerformActionOnThread);
t.Start("ItemFromForm2UsingThread");
}
private void PerformActionOnThread(object value)
{
//Add using Event
if (OnMyForm2Event != null)
OnMyForm2Event(this, new MyEventArgs(value.ToString()));
//Add item by calling public property on Form1
_Form1.AddToListUsingPublicProperty("ItemAddedDirectlyByCallingPublicMethod-Thread");
}
#endregion
#region Task
private void btnUsingTask_Click(object sender, EventArgs e)
{
Task.Factory.StartNew(() => _Form1.AddToListUsingPublicProperty("ItemAddedByTask")).
ContinueWith(x => _Form1.AddToListUsingPublicProperty("ItemAddedOnTaskCompletion"));
}
#endregion
}
public class MyEventArgs : EventArgs
{
public string EventData { get; set; }
public MyEventArgs(string eventData)
{
EventData = eventData;
}
}