To answer your first question, try changing your first example as follows:
return (byte[])this.Invoke((MethodInvoker)delegate
{
return GetBytes();
});
At this point, you will have the same compilation error.
public object Invoke(Delegate method) , . MethodInvoker, delegate void MethodInvoker(). , , Invoker, return -.
:
return (int)this.Invoke((Func<int>)delegate
{
return 3;
});
Func<int> , int, .