C#: String as parameter to event? C#: String as parameter to event? multithreading multithreading

C#: String as parameter to event?


Like this

public class NewListEntryEventArgs : EventArgs{    private readonly string test;    public NewListEntryEventArgs(string test)    {        this.test = test;    }    public string Test    {        get { return this.test; }    }}

then you declare your class like this

class MyClass{    public delegate void NewListEntryEventHandler(        object sender,        NewListEntryEventArgs args);    public event NewListEntryEventHandler NewListEntry;    protected virtual void OnNewListEntry(string test)    {        if (NewListEntry != null)        {            NewListEntry(this, new NewListEntryEventArgs(test));        }    }}

and in the subscribing Form

private void btn_myClass_Click(object sender, EventArgs e){    MyClass myClass = new MyClass();    myClass.NewListEntry += NewListEntryEventHandler;    ...}private void NewListEntryEventHandler(    object sender,    NewListEntryEventArgs e){    if (richTextBox1.InvokeRequired)    {        this.Invoke((MethodInvoker)delegate            {                             this.NewListEntryEventHandler(sender, e);            });        return;    }    richTextBox1.Text += e.Test;}

I've taken the liberty of making the NewListEntryEventArgs class immutable, since that makes sense. I've also partially corrected your naming conventions, simplified and corrected where expedient.


You need to create a new class by inheriting off EventArgs.


Create your own version of the EventArgs.

Do it like this:

public class MyEventArgs : EventArgs{   public string MyEventString {get; set; }   public MyEventArgs(string myString)   {       this.MyEventString = myString;   }}

Then in your code replace the EventArgs with MyEventArgs and create an MyEventArgs object with your string in it.

Then you can access it by using the MyEventArgs instance .MyEventString.

So you would do something like this:

///// myClass (working thread...)class myClass{    public event EventHandler NewListEntry;    public void ThreadMethod()    {        DoSomething();    }    protected virtual void OnNewListEntry(MyEventArgs e)    {        EventHandler newListEntry = NewListEntry;        if (newListEntry != null)        {            newListEntry(this, e);        }    }    private void DoSomething()    {        ///// Do some things and generate strings, such as "test"...        string test = "test";        OnNewListEntry(new MyEventArgs(test));    }}

And in your form:

private void myObj_NewListEntry(Object objSender, MyEventArgs e){    this.BeginInvoke((MethodInvoker)delegate    {        // Here I want to add my string from the worker-thread to the textbox!        richTextBox1.Text += e.MyEventString;    });}