Func<string> foo = () =>
{
try
{
return LISTVIEW.Items[x].Text.Trim();
}
catch
{
// this is the diaper anti-pattern... fix it by adding logging and/or making the code in the try block not throw
return String.Empty;
}
};
var ar = this.BeginInvoke(foo);
string sub = (string)this.EndInvoke(ar);
Вы, конечно, должны быть немного осторожны с EndInvoke, потому что это может вызвать взаимные блокировки.
если вы предпочитаете синтаксис делегата, вы также можете изменить
this.BeginInvoke((Action)(delegate()
до
this.BeginInvoke((Func<String>)(delegate()
вам нужно вернуть что-то из всех веток и вызвать call end.