In .NET, what thread will Events be handled in?

After re-reading the question, I think I understand the problem now. You’ve basically got something like this:

class Producer
{
    public Producer(ExternalSource src)
    {
        src.OnData += externalSource_OnData;
    }

    private void externalSource_OnData(object sender, ExternalSourceDataEventArgs e)
    {
        // put e.Data onto the queue
    }
}

And then you’ve got a consumer thread that pulls stuff off that queue. The problem is that the OnData event is fired by your ExternalSource object – on whatever thread it happens to be running on.

C# events are basically just an easy-to-use collection of delegates and “firing” an event just causes the runtime to loop through all of the delegates and fire them one at a time.

So your OnData event handler is getting called on whatever thread the ExternalSource is running on.

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)