另一个就是把你需要调用的异步函数变为普通的执行顺序,即非异步执行顺序

经过查阅,只需要一句:

var result = Task.Run(async() => await yourAsyncMethod()).Result;

对于没有返回值的异步函数:

Task.Run(async () => { await yourAsyncMethod(); }).Wait();

参考来源:
https://stackoverflow.com/questions/15149811/how-to-wait-for-async-method-to-complete/44578884#44578884

在WPF中,如果 Button 等触发的事件函数中,有异步函数时程序就会陷入卡死状态是因为线程的问题一个解决方法是把 Button 的事件函数变为异步函数另一个就是把你需要调用的异步函数变为普通的执行顺序,即非异步执行顺序经过查阅,只需要一句:var result = Task.Run(async() => await yourAsyncMethod()).Result;对于没有返回值的异步函数:Task.Run(async () => { await yourAsyncMet
winform程序开发,在进行多线程操作时,经常会遇到线程间操作问题:“线程间操作无效: 从不是创建控件的线程访问它。” 问题在于,在进行控件操作时,子线程(耗时操作)还在执行,相关数据、控件没有赋值等,就会出现“未将对象引用为对象实例”、“线程间操作无效: 从不是创建控件的线程访问它。”等报错,此时,我们考虑监控线程的状态,等待该线程执行结束后,再进行其他操作。 Thread thread = new Thread(new ThreadStart(执行函数)); th...
普通的异步队列可以回看我之前一篇博客:https://www.cnblogs.com/log9527blog/p/16517315.html 但是之前实现的异步队列,任务如果出现await等待,会认为该任务已经完成,并且开始下一个任务。所有为了实现异步队列等待await执行完毕再执行下一个任务,下面重写了新的异步队列: using System; using System.Collecti...
1.简单调用外部程序文件(exe文件,批处理等),只需下面一行代码即可 System.Diagnostics.Process.Start(“应用程序文件全路径”); 2.如果要等待调用外部程序执行完毕才执行下面代码,只需要在后面加上WaitForExit()方法 System.Diagnostics.Process.Start(应用程序文件全路径).WaitForExit(); 3.另一种...
等待应用程序执行完毕 //等待应用程序执行完毕 private void btnProcessIndefinitely_Click(object sender, EventArgs e) { //配置文件案路径...
文章目录前言一、Async/Await特性语法结构1. 异步调用方法:异步方法的调用,其返回类型有三种:2. 异步声明方法3. 必要的Await表达式二、在WPF如何使用Async/Await特性?1.先展示一个WPF示例三、如何创建并使用自己的异步方法?四、如何取消异步任务?五、如何同步等待异步任务完成?六、如何异步等待任务完成七、如何暂停异步任务而不影响主线程任务的执行? 在总结之前需要了解什么是同步方法异步方法 同步方法:程序按照编写顺序进行执行,在调用方法时线程会等待方法返回后再继续执.
使用非异步方法调用可异步方法(内含嵌套异步)效果图:代码(在控制台mian函数运行该函数):        private static void AsyncTest()             Func<Task<string>> Fun1 = () =>                 Thread.Sleep(4...
在工作经常会遇到对线程执行的情况,我现在想在线程执行完成后做一些其他的操作,应该怎么做呢? 当然强大的c#已经给我们封装好了方法,那就是ContinueWith这个方法,具体的用法如下:  Task.Run(() => {              //线程执行的操作             }).ContinueWith(LivenessTask);         priv...
C# 死循环等待方式 在工业软件、上位机等需要对硬件设备进行实时通信的开发过程,我们经常会使用死循环来循环读取缓冲区的数据。如下所示 private void Receive() while (true) //返回接收缓冲区尚未被读取的帧数 UInt32 num = VCI_GetReceiveNum(devType, devIndex, devChannel);
C# 异步执行可以通过使用 async 和 await 关键字来实现。async 关键字用于标记方法异步方法,而 await 关键字用于等待异步操作完成。 下面是一个示例代码,演示了如何使用 async 和 await 实现异步执行: ```csharp async Task DoSomethingAsync() // 异步操作1 await Task.Delay(1000); // 异步操作2 await Task.Run(() => // 执行一些耗时的操作 // 异步操作3 await SomeOtherAsyncMethod(); async Task SomeOtherAsyncMethod() // 执行异步操作 在上面的代码,DoSomethingAsync 方法是一个异步方法。它通过 await 关键字等待三个异步操作完成。第一个异步操作是使用 Task.Delay 方法模拟一个等待 1 秒的操作,第二个异步操作是使用 Task.Run 方法执行一些耗时的操作,第三个异步操作是调用 SomeOtherAsyncMethod 方法。 注意,异步方法必须返回 Task 或 Task<T> 类型,这表示异步操作的结果。在异步方法,可以使用 await 关键字等待其他异步方法或任务完成。当异步方法的第一个 await 关键字执行时,该方法将暂停执行,直到异步操作完成。然后,方法将从 await 关键字后的代码继续执行。如果异步操作已经完成,await 关键字将立即返回,并且方法继续执行
这边可以做一个优化通过多选枚举来选择需要传递的事件 [code=plain] [SerializeField] private PassEventType m_PassEventType = PassEventType.None; //监听按下 public void OnPointerDown(PointerEventData eventData) if ((m_PassEventType & PassEventType.PointerDown) != 0) PassEvent(eventData, ExecuteEvents.pointerDownHandler); [System.Flags] public enum PassEventType None = 0, /// <summary> /// Intercepts a IPointerDownHandler.OnPointerDown. /// </summary> PointerDown = 1, /// <summary> /// Intercepts a IPointerUpHandler.OnPointerUp. /// </summary> PointerUp = 2, /// <summary> /// Intercepts a IPointerClickHandler.OnPointerClick. /// </summary> PointerClick = 4, [/code] Unity中,实现鼠标点击物体,触发事件 随便加一个就可以。就好比我说笔,可以是铅笔,钢笔