????????????н???????????????
AsyncInvokeDel calculateAction = cal.Calculate; 
string resultStrAction = string.Empty; 
// int result1 = calculateAction.Invoke(123?? 456?? ref resultStrAction); 
IAsyncResult calculateResult1 = calculateAction.BeginInvoke(123?? 456?? ref resultStrAction?? null?? null); 
int result1 = calculateAction.EndInvoke(ref resultStrAction?? calculateResult1);

???????????????????

???????? Windows ????????????????????????????????????????????????????????????????????????????μ??????????????????????????? bug????????????????????????????????????????????????

??????????????Щ????£???????????????????????????.NET Framework ??????κ????????????????

????1???????????????????????????????????

????????????????е?????????????????????н?Form??CheckForIllegalCrossThreadCalls????????????false??
// ????????????????????????????????????? 
// ??Щ???????????ó????????????System.Windows.Forms.Control.Handle????? 
// ???????????????????????? true??????? false?? 
public static bool CheckForIllegalCrossThreadCalls { get; set; }

????2??????????????

?????????????????????ò???????罫?????????????????????ò??????????????????????У????????????????????????????????????????????д??????????????????е?????????????????????д?????????

????????????????????ò???????罫??????????????????????????????????????????????????????????

????1?????BackgroundWork?????????????????AsyncOperationManager???AsyncOperation??????????????

????2?????TaskScheduler.FromCurrentSynchronizationContext() ??Task ????

????3?????Control????????Invoke ??BeginInvoke??????

??????????????IAsyncResult?????????????????????Invoke ??BeginInvoke???????????????

????Control???????ISynchronizeInvoke????????Invoke??BeginInvoke???????????????????GUI????????????
public interface ISynchronizeInvoke 

    // ????????????????????????????????????????? 
    bool InvokeRequired { get; } 
    // ?????????????????????????С? 
    AsyncResult BeginInvoke(Delegate method?? params object[] args); 
    object EndInvoke(IAsyncResult asyncResult); 
    // ??????????????????????????С? 
    object Invoke(Delegate method?? params object[] args); 
}