Вместо блокировки потока пользовательского интерфейса с помощью CountWords, запустите этот метод в фоновом потоке, используя пул потоков
private void Form2_Load(object sender, EventArgs e)
{
ThreadPool.QueueUserWorkItem(
new WaitCallback(CountWords));
}
Затем убедитесь, что все вызовы элементов управления пользовательского интерфейса перенаправляются обратно в поток пользовательского интерфейса, который вы делаетеиз фонового потока:
foreach (KeyValuePair<string, int> word in words)
{
// Need to marshal this back onto the UI thread
var itemToAdd = word.Key + " " + word.Value + "x";
this.BeginInvoke(new Action<string>(AddItemToListView), itemToAdd);
}
И тогда наш метод AddItemToListView добавит элемент в поток пользовательского интерфейса:
private void AddItemToListView(string item)
{
listView1.Items.Add(item);
}