国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 文成县| 景泰县| 申扎县| 包头市| 鹰潭市| 深水埗区| 郑州市| 承德县| 汤原县| 农安县| 会同县| 齐河县| 民丰县| 宁陕县| 辰溪县| 巫溪县| 永泰县| 汤原县| 读书| 海晏县| 佛冈县| 通河县| 平顶山市| 铁岭市| 常宁市| 南郑县| 龙江县| 涟水县| 柘城县| 景谷| 鸡泽县| 深水埗区| 搜索| 简阳市| 汤阴县| 克什克腾旗| 吴旗县| 郯城县| 大竹县| 台南市| 丹寨县|