UI Threads

WinForms

void GetNewTweet() {
    var tweet = _twitter.GetTweet();
    if (InvokeRequired)
        this.Invoke(new Action(() => listTweets.Items.Add(tweet)));
    else
        listTweets.Items.Add(tweet);
}

WPF

This pattern isn’t limited to Windows Forms. The specific way to check the current thread and use the UI thread may vary depending on the type of application you’re using. (WPF) uses Dispatcher.CheckAccess and Dispatcher.Invoke.

PostSharp

// UIThread, WorkerThread  : MethodInterceptionAspect

public delegate void UIWorkDelegate();

public static void ExecuteUIWorkAsyncWithDispatchTimer(UIWorkDelegate action) {
DispatcherTimer timer = new DispatcherTimer { Interval = new TimeSpan(100) };
timer.Tick += new EventHandler(delegate(object sender, EventArgs e) {
    timer.Stop();
    timer = null;
    action.DynamicInvoke(null);
});
timer.Start();
}