Я бы пошел на фонового работника.
Установите событие RunWorkerCompleted и DoWork, запустите его и, когда вы получите свой результат в DoWork, установите аргумент события для вашего результата (e.Result).
BackgroundWorker bw = new BackgroundWorker();
bw.DoWork += new DoWorkEventHandler(bw_DoWork);
bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);
bw.RunWorkerAsync();
private void bw_DoWork(object sender, DoWorkEventArgs e)
{
// Do your processing
e.Result = result;
}
private void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
ResultLabel.Text = (string)e.Result;
}
Примеры не проверены, но ваша IDE должна помочь вам. Также вам придется разрешить BackgroundWorker или просто добавить
using System.ComponentModel;
Больше информации здесь: http://msdn.microsoft.com/en-us/library/cc221403(v=vs.95).aspx
Надеюсь, это поможет!