This is a question for a C# theorist, actually.
One syntax we happened to use involves delegates, that is, a form like this:
Code:
String fld1 = "message";
String fld2 = "timestamp";
String it1 = "greetings";
Thread t = new Thread(new ThreadStart(delegate() {
    go = true;
    int c = 0;
    Random rand = new Random();
    while (go)
    {
        IDictionary eventData = new Hashtable();
        eventData[fld1] = c % 2 == 0 ? "Hello" : "World";
        eventData[fld2] = DateTime.Now.ToString("s");
        _listener.Update(it1, eventData, false);
        c++;
        Thread.Sleep(1000 + rand.Next(2000));
    }
}));

t.Start();