WPF 异步执行

private void Operate_OnClick(object sender, RoutedEventArgs e)
{
    AsyncFindBox();
    RadWindow.Alert("测试测试!");
}

private void AsyncFindBox()
{
    #region 需要将返回结果返回到UI上。
    //异步任务封装在一个delegate中, 此delegate将运行在后台线程
    Func<string> asyncAction = this.AsyncActionMethod;

    //在UI线程中得到异步任务的返回值,并更新UI
    //必须在UI线程中执行
    Action<IAsyncResult> resultHandler = delegate(IAsyncResult asyncResult)
    {
        //异步执行后,将值更新到UI上。
        //string result= asyncAction.EndInvoke(asyncResult);
        //SearchValue.Text=result;
    };
    //异步任务执行完毕后的callback, 此callback运行在后台线程上.
    //此callback会异步调用resultHandler来处理异步任务的返回值.
    AsyncCallback asyncActionCallback = delegate(IAsyncResult asyncResult)
    {
         Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.Background, resultHandler, asyncResult);
    };
    //在UI线程中开始异步任务,
    //asyncAction(后台线程), asyncActionCallback(后台线程)和resultHandler(UI线程)
    //将被依次执行
     asyncAction.BeginInvoke(asyncActionCallback, null);
     #endregion

    #region 不需要将返回结果返回到UI上的。
    //Func<string> asyncAction = this.AsyncActionMethod;
    //asyncAction.BeginInvoke(null, null);

    //Action asyncAction = this.FindBox; //方法无返回值
    //asyncAction.BeginInvoke(null, null);
     #endregion
}

private string AsyncActionMethod()
{
    var commandMessage = "";
    Thread.Sleep(5000);
    Console.WriteLine(1111);
    // 发射亮灯
    BasketLight.SendCmd(5, BasketLight.CmdType.Ready, 0, ref commandMessage);
    return "";
}

private void FindBox()
{
    var commandMessage = "";
    Thread.Sleep(5000);
    Console.WriteLine(1111);
    // 发射亮灯
    BasketLight.SendCmd(5, BasketLight.CmdType.Ready, 0, ref commandMessage);
}
时间: 2024-08-09 10:28:25

WPF 异步执行的相关文章

WPF异步调用WCF服务

wpf调用wcf时,第一次访问总耗时到达几秒,影响界面的用户体验,因此在wpf加载界面和加载数据时采用异步加载,即异步访问wcf服务, 由于是否采用异步加载和服务端无关,仅仅由客户端自己根据需要来选择,则我们只需要在客户端(WPF)程序中采用异步的方法.如下: //1.创建一个异步对象,访问wcfFunc<string, string, List<NodeItem>> GetDataFromWCF = new Func<string, string, List<Node

异步执行js脚本——防止阻塞

JS允许我们修改页面中的所有方面:内容,样式和用户进行交互时的行为. 但是js同样可以阻塞DOM树的形成并且延迟页面的渲染. 让你的js变成异步执行,并且减少不必要的js文件从而提高性能. JavaScript可以查询和修改DOM和CSSOM JavaScript的执行阻塞了CSSOM的执行 JavaScript 阻塞了DOM的形成,除非特殊声明js异步执行 js是一个同步语言可以修改网页的任何方面: <html> <head> <meta name="viewpo

Windows 商店应用程序异步执行task和调整task优先级

在制作WP8.1手电筒的时候遇到一个问题,手电筒有时候能够点亮有时候点不亮. 在MSDN论坛上面有人告诉我可能是优先级的问题示意叫我使用CoreDispatcher 将task任务提高权限,但是发现还是不行. 后来发现点亮闪关灯需要在UI线程中触发,不能再异步中实现,感觉和画图有点类似不能在非主线程中绘制图片. 下面我就分享怎么利用CoreDispatcher改变task任务的优先级(不过还没有验证,因为我还没有遇到需要改变优先级的task,但是依据Windows运行时API的说明应该是正确的改

任务执行和任务处理的异步执行

最近在看<深入剖析Tomcat>,在第四章有讲解Tomcat的默认连接器,和这个连接器有着密切关系的是一个处理器.一个连接器可以对应多个处理器.连接器的作用是从客户端的请求中提取出Socket,然后把Socket传递给处理器来处理用户的请求.需要注意的是连接器的关注点是在接收请求,分派给他下游的处理器去执行,在把Socket传递下去后,连接器在这次请求中的任务已经完成.这里可以看到,连接器和处理器他们是异步进行的,异步的处理为多线程的执行提供了可能. 在这里我要说的是,在看了Tomcat的源码

node js 异步执行流程控制模块Async介绍

1.Async介绍 sync是一个流程控制工具包,提供了直接而强大的异步功能.基于Javascript为Node.js设计,同时也可以直接在浏览器中使用. Async提供了大约20个函数,包括常用的 map, reduce, filter, forEach 等,异步流程控制模式包括,串行(series),并行(parallel),瀑布(waterfall)等. 项目地址:https://github.com/caolan/async 2. Async安装 npm install async 3.

多线程异步执行脚本

获取远程计算机信息: $d=get-date $servers="10.4.34.41","10.4.34.40","10.4.34.36","10.4.34.37","10.4.34.39" $serverpass="Dell1950" $UserName="Administrator" #定义线程数量$throttleLimit = 5$SessionState

异步执行的运行机制

异步执行的运行机制如下.(同步执行也是如此,因为它可以被视为没有异步任务的异步执行.) (1)所有同步任务都在主线程上执行,形成一个执行栈(execution context stack). (2)主线程之外,还存在一个"任务队列"(task queue).只要异步任务有了运行结果,就在"任务队列"之中放置一个事件. (3)一旦"执行栈"中的所有同步任务执行完毕,系统就会读取"任务队列",看看里面有哪些事件.那些对应的异步任务

使用spring的@Async异步执行方法

应用场景: 1.某些耗时较长的而用户不需要等待该方法的处理结果 2.某些耗时较长的方法,后面的程序不需要用到这个方法的处理结果时 在spring的配置文件中加入对异步执行的支持 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.spri

什么是异步执行?异步执行和多线程执行的不同?

什么是异步执行? 异步执行:就是不需要等待别的任务完,就立刻执行同步执行刚好相反,异步执行,所以可以多个进程执行 异步跟多线程有什么区别? 异步同步是交互方式?多线程是性能任务的说法