I feel that using the relatively new async
feature of C# is the best way to implement asynchronous methods because it provides an exit point for the method when it completes. You can use it like this
button.Click += MyEventHandlerAsync;
private async void MyEventHandlerAsync(object sender, RoutedEventArgs e)
{
string text = await Task.Run(() => this.MyMethodThatReturnsAString());
this.label.Content = text;
}
private string MyMethodThatReturnsAString()
{
return "Forty Two ";
}