国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

CefSharp v62修改方法(支持.net4.0)

2024-07-10 12:48:52
字體:
供稿:網(wǎng)友

吐槽一下,博客園久了沒有上,賬號沒了,重新申請一個.

cesharp v62版本,內(nèi)核采用最新的Cef 62,支持最新的Grid布局. 由于官方的cefsharp 采用.net4.5.2開發(fā).怎么辦怎么辦.我只能用.net4.0.沒辦法啊,自己拿源碼修改兼容唄.

仔細分析源碼發(fā)現(xiàn):

1.net4.5.2 引入了 async/await 關(guān)鍵字. 這個其實國外大神已經(jīng)有源碼放出來了,我們把代碼直接引入cefsharp 這個工程. 就可以直接在4.0里使用 async/await;

2.net4.5 對task api 做了擴展, 我們只需要在.net4.0實現(xiàn)一下對應(yīng)的api.就可以了.

3. 源碼里面用了很多4.5才有的GetTypeInfo 擴展方法錯誤. 它返回的類型是typeinfo,不用管它,把GetTypeInfo 刪掉. 直接Type 調(diào)用就可以了.

4. 對Task靜態(tài)方法的擴展,需要修改一下,靜態(tài)方法的調(diào)用方式.

以上是要點.下面貼源碼:

本段源碼是對:async/await的支持:

namespace System.Threading.Tasks{ public static class TaskEx { public static TaskAwaiter GetAwaiter(this Task task) {  return new TaskAwaiter(task); } public static TaskAwaiter<T> GetAwaiter<T>(this Task<T> task) {  return new TaskAwaiter<T>(task); } } public struct TaskAwaiter : INotifyCompletion { readonly Task task; internal TaskAwaiter(Task task) {  this.task = task; } internal static TaskScheduler TaskScheduler {  get  {  if (SynchronizationContext.Current == null)   return TaskScheduler.Default;  else   return TaskScheduler.FromCurrentSynchronizationContext();  } } public bool IsCompleted {  get { return task.IsCompleted; } } public void OnCompleted(Action continuation) {  this.task.ContinueWith(  delegate (Task task) {   continuation();  }, TaskAwaiter.TaskScheduler); } public void GetResult() {  try  {  task.Wait();  }  catch (AggregateException ex)  {  throw ex.InnerExceptions[0];  } } } public struct TaskAwaiter<T> : INotifyCompletion { readonly Task<T> task; internal TaskAwaiter(Task<T> task) {  this.task = task; } public bool IsCompleted {  get { return task.IsCompleted; } } public void OnCompleted(Action continuation) {  this.task.ContinueWith(  delegate (Task<T> task) {   continuation();  }, TaskAwaiter.TaskScheduler); } public T GetResult() {  try  {  return task.Result;  }  catch (AggregateException ex)  {  throw ex.InnerExceptions[0];  } } }}namespace System.Runtime.CompilerServices{ public interface INotifyCompletion { void OnCompleted(Action continuation); } public interface ICriticalNotifyCompletion : INotifyCompletion { [SecurityCritical] void UnsafeOnCompleted(Action continuation); } public interface IAsyncStateMachine { void MoveNext(); void SetStateMachine(IAsyncStateMachine stateMachine); } public struct AsyncVoidMethodBuilder { public static AsyncVoidMethodBuilder Create() {  return new AsyncVoidMethodBuilder(); } public void SetException(Exception exception) {  throw exception; } public void SetResult() { } public void SetStateMachine(IAsyncStateMachine stateMachine) {  // Should not get called as we don't implement the optimization that this method is used for.  throw new NotImplementedException(); } public void Start<TStateMachine>(ref TStateMachine stateMachine) where TStateMachine : IAsyncStateMachine {  stateMachine.MoveNext(); } public void AwaitOnCompleted<TAwaiter, TStateMachine>(ref TAwaiter awaiter, ref TStateMachine stateMachine) where TAwaiter : INotifyCompletion where TStateMachine : IAsyncStateMachine {  awaiter.OnCompleted(stateMachine.MoveNext); } public void AwaitUnsafeOnCompleted<TAwaiter, TStateMachine>(ref TAwaiter awaiter, ref TStateMachine stateMachine) where TAwaiter : ICriticalNotifyCompletion where TStateMachine : IAsyncStateMachine {  awaiter.OnCompleted(stateMachine.MoveNext); } } public struct AsyncTaskMethodBuilder { TaskCompletionSource<object> tcs; public Task Task { get { return tcs.Task; } } public static AsyncTaskMethodBuilder Create() {  AsyncTaskMethodBuilder b;  b.tcs = new TaskCompletionSource<object>();  return b; } public void Start<TStateMachine>(ref TStateMachine stateMachine) where TStateMachine : IAsyncStateMachine {  stateMachine.MoveNext(); } public void SetStateMachine(IAsyncStateMachine stateMachine) {  // Should not get called as we don't implement the optimization that this method is used for.  throw new NotImplementedException(); } public void AwaitOnCompleted<TAwaiter, TStateMachine>(ref TAwaiter awaiter, ref TStateMachine stateMachine) where TAwaiter : INotifyCompletion where TStateMachine : IAsyncStateMachine {  awaiter.OnCompleted(stateMachine.MoveNext); } public void AwaitUnsafeOnCompleted<TAwaiter, TStateMachine>(ref TAwaiter awaiter, ref TStateMachine stateMachine) where TAwaiter : ICriticalNotifyCompletion where TStateMachine : IAsyncStateMachine {  awaiter.OnCompleted(stateMachine.MoveNext); } public void SetResult() {  tcs.SetResult(null); } public void SetException(Exception exception) {  tcs.SetException(exception); } } public struct AsyncTaskMethodBuilder<T> { TaskCompletionSource<T> tcs; public Task<T> Task { get { return tcs.Task; } } public static AsyncTaskMethodBuilder<T> Create() {  AsyncTaskMethodBuilder<T> b;  b.tcs = new TaskCompletionSource<T>();  return b; } public void Start<TStateMachine>(ref TStateMachine stateMachine) where TStateMachine : IAsyncStateMachine {  stateMachine.MoveNext(); } public void SetStateMachine(IAsyncStateMachine stateMachine) {  // Should not get called as we don't implement the optimization that this method is used for.  throw new NotImplementedException(); } public void AwaitOnCompleted<TAwaiter, TStateMachine>(ref TAwaiter awaiter, ref TStateMachine stateMachine) where TAwaiter : INotifyCompletion where TStateMachine : IAsyncStateMachine {  awaiter.OnCompleted(stateMachine.MoveNext); } public void AwaitUnsafeOnCompleted<TAwaiter, TStateMachine>(ref TAwaiter awaiter, ref TStateMachine stateMachine) where TAwaiter : ICriticalNotifyCompletion where TStateMachine : IAsyncStateMachine {  AwaitOnCompleted(ref awaiter, ref stateMachine); } public void SetResult(T result) {  tcs.SetResult(result); } public void SetException(Exception exception) {  tcs.SetException(exception); } }}            
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 平阴县| 铜山县| 宁明县| 邵东县| 桐乡市| 辛集市| 潢川县| 简阳市| 莆田市| 洞口县| 荣成市| 郴州市| 梧州市| 大渡口区| 惠水县| 五家渠市| 蒙自县| 鄢陵县| 卓资县| 南雄市| 曲周县| 德保县| 武汉市| 扶沟县| 正阳县| 岳阳市| 宝兴县| 申扎县| 夏河县| 正安县| 大足县| 彰武县| 稷山县| 彰化市| 大姚县| 淳化县| 桦甸市| 资兴市| 兰西县| 章丘市| 石景山区|