????????????????????????EMP??
???????????? ???????[ 2013/4/7 10:23:29 ] ????????
????4??AsyncOperation?????????е??????????????CreateOperation() ???????????AsyncOperationManager?????AsyncOperation.CreateOperation() ?????????????AsyncOperation?????
????5??AsyncOperation???????SynchronizationContext??????????????ó???????“??????????”??????????????????
// ??????????????д?????????????????????
public class SynchronizationContext
{
// ????????????????????
public static SynchronizationContext Current { get; }
// ??????????????д????????????????????
public virtual void OperationStarted();
// ??????????????д????????????????????????????
public virtual void Post(SendOrPostCallback d?? object state);
// ??????????????д????????????????????
public virtual void OperationCompleted();
……
}
????a????AsyncOperation???????е???SynchronizationContext??OperationStarted() ??
????b????AsyncOperation?? Post() ?????е???SynchronizationContext??Post() ??
????c????AsyncOperation??OperationCompleted()?????е???SynchronizationContext??OperationCompleted()??
????6??SendOrPostCallback????????
// ????????????????????????????????????????
public delegate void SendOrPostCallback(object state);
???????????????????????
????1?????????????????????????????????????????????????????????????
????1????????????????? ***Async?????????????? ***Completed ??????????Щ??????????汾??
????2?????????????????? ***Async???????????????????????? ***Completed ??????????Щ??????????汾??
????3?????????????????????????????????CancelAsync()?????????????????????????ReportProgress() ????+ProgressChanged???????
????4???????????????????????????????????????????????????????
????a???????????????????????????????????
????b??????????EventArgs??????????????????????? ***ProgressChanged????????÷?????????????????
????5????????????????????????????IsBusy?????
????6?????????????????汾???? Out ?? Ref ????????????????? ***CompletedEventArgs????????eg??
public int MethodName(string arg1?? ref string arg2?? out string arg3);
public void MethodNameAsync(string arg1?? string arg2);
public class MethodNameCompletedEventArgs : AsyncCompletedEventArgs
{
public int Result { get; };
public string Arg2 { get; };
public string Arg3 { get; };
}
????2????????????????????????????????С??????
????1???***Async????????????userState??????????????????????***Async????????е????????????????????????????????????
????2??????????????????????????userState???????????? lock ????????????????????????????????????????userState????
????3????***Async????????????AsyncOperationManager.CreateOperation??????userState????????????????AsyncOperation????userState?洢??AsyncOperation??UserSuppliedState?????С?????????????????????????????????????????CompletedEventArgs??ProgressChangedEventArgs??????UserState??????????????????????????????????????
????4??????????userState???????????????????????????????????AsyncCompletedEventArgs.UserState???????????????
??????
![](/images/ad-banner/ad-banner.png)
???·???
??????????????????
2023/3/23 14:23:39???д?ò??????????
2023/3/22 16:17:39????????????????????Щ??
2022/6/14 16:14:27??????????????????????????
2021/10/18 15:37:44???????????????
2021/9/17 15:19:29???·???????·
2021/9/14 15:42:25?????????????
2021/5/28 17:25:47??????APP??????????
2021/5/8 17:01:11