hi,
you can refer here for multithreaded window control example
http://msdn2.microsoft.com/en-us/library/3s8xdz5c.aspx
a example for you, you will see thelistBox1 is still being appended after form shown. And, at the same time, users can still click on the button to add the timestamp to list box2 .
Hope it can help you. 
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace WindowsApplication2
{
public delegate void UpdateListBox();
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void ShowNumbers()
{
toolStripStatusLabel1.Text = " List Box is being filled";
for (int i = 0; i <= 100000; i++)
{
listBox1.Items.Add(i.ToString());
Application.DoEvents();
}
toolStripStatusLabel1.Text = " List Box is completedly filled";
}
private void StartThreadWork()
{
if (this.listBox1.InvokeRequired)
{
UpdateListBox delegateToUpdateListBox = new UpdateListBox(ShowNumbers);
this.Invoke(delegateToUpdateListBox, null);
}
else
ShowNumbers();
}
private void Form1_Shown(object sender, EventArgs e)
{
StartThreadWork();
}
private void btnAddToListBox2_Click(object sender, EventArgs e)
{
listBox2.Items.Add( DateTime.Now.ToLongTimeString());
}
}
}