using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace WindowsFormsApplication1 { public partial class Form1 : Form { TestClass testClass = new TestClass(); public Form1() { InitializeComponent(); testClass.TestEvent += new EventHandler(TestClass_TestEvent); } private void TestClass_TestEvent(object sender, TestEventArgs e) { // CHeck if we're on the right thread if (InvokeRequired) { // Invoke the method we're in on the form's thread Invoke(new EventHandler(TestClass_TestEvent)); } MessageBox.Show(e.TestString); } } public class TestClass { public event EventHandler TestEvent; public void Test() { OnTestEvent("Test arg..."); } private void OnTestEvent(string testString) { EventHandler handler = TestEvent; if (handler != null) { // Raise the event handler(this, new TestEventArgs(testString)); } } } public class TestEventArgs : EventArgs { private readonly string _testString; public TestEventArgs(string testString) { _testString = testString; } public string TestString { get { return _testString; } } } }