task的使用

本文深入解析了WP7应用开发中的Task任务,包括如何使用SmsComposeTask、EmailComposeTask、PhoneCallTask、WebBrowserTask等进行短信发送、邮件发送、电话拨打、网页浏览等功能,并详细介绍了如何通过Task实现保存联系人、选择电话号码、拍照、选择图片等操作。此外,文章还展示了如何利用Task监测设备加速度变化。实例代码丰富,易于理解。

所有Task都有Show方法,调用Show方法启动任务,任务执行完毕一般会返回应用。所有任务都不是自动启动,而是需要用户手动点击启动,是WP7基于安全考虑,防止泄密、吸费等问题。无法用来实现批量发短信。所有Task都需要用户手动触发执行。这些Task监视工具都看不到,通过电脑摄像头看

 

SmsComposeTask:启动发送短信的任务,可以通过To、Body两个属性设置对方号码和短信内容。注意Show以后只是显示发送界面

1 SmsComposeTask sm = new SmsComposeTask();
2             sm.Body = "对不起,你本月的余额非常的充足。请不要充值!";
3             sm.To = "10086";//可以多人发送sm.To = "10086;10000;110"
4             sm.Show();

需要用户点手状的按钮确定发送

EmailComposeTask:发邮件的任务,可以通过Subject 、 Body To 、 Cc属性设置标题、内容、收件人、抄送。使用该功能需要设置下邮箱账户

复制代码
1  EmailComposeTask et = new EmailComposeTask();
2             et.Subject = "主题";
3             et.Body = "正文";
4             et.To = "123@123.com";
5            // et.Cc = "抄送";
6             et.Show();
复制代码

PhoneCallTask:拨打电话的任务,可以通过PhoneNumber、DisplayName属性设置拨打的号码和显示的名称。实现“在软件中查找到商家以后点击号码直接拨号”

1 PhoneCallTask pct = new PhoneCallTask();
2             pct.DisplayName = "移动客服";
3             pct.PhoneNumber = "10086";
4             pct.Show();

WebBrowserTask:打开网页的任务,可以通过URL属性设置要打开网页的地址。实现二维码软件的“在线购买”功能

1 WebBrowserTask webShow = new WebBrowserTask();
2             webShow.Uri = new Uri("http://www.baidu.com");
3             webShow.Show();

有一些需要得到执行结果的任务,这些任务一般都从ChooserBase继承,监听Completed事件,从e中可以获得执行结果,所有e任务都有属性TaskResult表示执行结果(OK执行成功,Cancel任务被取消),Error表示执行过程中的异常信息(如果没有异常就是null)。

SavePhoneNumberTask:保存联系人(People)号码。

复制代码
 1  SavePhoneNumberTask saveNum = new SavePhoneNumberTask();
 2             saveNum.PhoneNumber = "10086";
 3             saveNum.Completed += new EventHandler<TaskEventArgs>(saveNum_Completed);
 4             saveNum.Show();
 5         }
 6 
 7         void saveNum_Completed(object sender, TaskEventArgs e)
 8         {
 9             if (e.TaskResult==TaskResult.OK)
10             {
11                 MessageBox.Show("保存成功");
12             }
13             else
14             {
15                 MessageBox.Show("未保存");
16             }
17         }
复制代码

PhoneNumberChooserTask:选择电话号码,e. PhoneNumber为选择的电话号码。可以实现支付宝手机客户端的“给手机充值”功能中让用户选择用户,自动填充手机号码。

复制代码
 1  PhoneNumberChooserTask numberChooser = new PhoneNumberChooserTask();
 2             numberChooser.Completed += new EventHandler<PhoneNumberResult>(numberChooser_Completed);
 3             numberChooser.Show();
 4         }
 5 
 6         void numberChooser_Completed(object sender, PhoneNumberResult e)
 7         {
 8             if (e.TaskResult==TaskResult.OK)
 9             {
10                 MessageBox.Show(e.DisplayName+"="+e.PhoneNumber);//移动客服=10086
11             }
12         }
复制代码

以下CameraCaptureTask等和摄像头、音乐、图片等和媒体相关的要用WPConnect连接,不能用Zune连接。

   CameraCaptureTask启动拍照任务,e. ChosenPhoto为拍照的图片流。(模拟器用电脑摄像头模拟手机摄像头,如果电脑没有摄像头可以拖入图片或者wmv视频

复制代码
 1   CameraCaptureTask camTask = new CameraCaptureTask();
 2             camTask.Completed += new EventHandler<PhotoResult>(camTask_Completed);
 3             camTask.Show();
 4         }
 5 
 6         void camTask_Completed(object sender, PhotoResult e)
 7         {
 8             if (e.TaskResult==TaskResult.OK)
 9             {
10                 BitmapImage img = new BitmapImage();
11                 img.SetSource(e.ChosenPhoto);//获取图片的数据流
12                 //放到一个image容器中
13                 image1.Source = img;
14             }
15         }
复制代码

PhotoChooserTask选择图片的任务, e. ChosenPhoto为拍照的图片流。PixelHeight、PixelWidth属性为要选择图片的尺寸,如果设置了这两个属性则会提供图片截取的功能(可以用来实现上传QQ头像的功能),ShowCamera为是否允许用户拍照。实现微博的插入图片功能。

复制代码
 1  PhotoChooserTask photoChoose = new PhotoChooserTask();
 2             photoChoose.ShowCamera = true;//开启手机摄像头
 3             photoChoose.PixelHeight = 200; 
 4             photoChoose.PixelWidth = 200;
 5             photoChoose.Completed += new EventHandler<PhotoResult>(photoChoose_Completed);
 6             photoChoose.Show();
 7         }
 8 
 9         void photoChoose_Completed(object sender, PhotoResult e)
10         {
11             if (e.TaskResult == TaskResult.OK)
12             {
13                 BitmapImage img = new BitmapImage();
14                 img.SetSource(e.ChosenPhoto);//获取图片的数据流
15                 //放到一个image容器中
16                 image1.Source = img;
17             }
18         }
复制代码

Accelerometer,感应加速度的变化,Start方法启动,Stop方法停止,当加速度发生变化以后ReadingChanged事件触发。e.Xe.Ye.Z得到加速度,右边是坐标系

 

复制代码

1 //添加引用 Microsoft.Devices.Sensors 2 Accelerometer acceler = new Accelerometer(); 3 acceler.CurrentValueChanged += new EventHandler<SensorReadingEventArgs<AccelerometerReading>>(acceler_CurrentValueChanged); 4 acceler.Start(); 5 6 } 7 8 void acceler_CurrentValueChanged(object sender, SensorReadingEventArgs<AccelerometerReading> e) 9 {10 Dispatcher.BeginInvoke(() => { 11 textBlock1.Text = e.SensorReading.Acceleration.X + "," + e.SensorReading.Acceleration.Y + "," + e.SensorReading.Acceleration.Z;12 });13 }

复制代码

 

文章来源http://www.yhbet365.com/list.asp?cid=2

### Spring Task 使用指南 #### 1. Spring Task 基本概念 Spring Task 是一种轻量级的任务调度框架,支持通过简单的注解或 XML 配置来实现定时任务的功能。它主要依赖于 `@Scheduled` 和 `ThreadPoolTaskScheduler` 来完成任务的计划和执行。 --- #### 2. 示例代码:基本配置与使用方法 以下是基于注解方式的一个简单示例: ```java // 启用 Scheduled 支持 @SpringBootApplication @EnableScheduling public class TaskApplication { public static void main(String[] args) { SpringApplication.run(TaskApplication.class, args); } } ``` 定义一个带有 `@Scheduled` 注解的方法: ```java @Component public class MyTask { @Scheduled(cron = "0/5 * * * * ?") // 每隔 5 秒钟执行一次 public void performTask() { System.out.println("当前时间:" + LocalDateTime.now()); } @Scheduled(fixedRate = 10000) // 每隔 10 秒钟执行一次 public void fixedRateTask() { System.out.println("Fixed Rate Task 执行时间:" + LocalDateTime.now()); } } ``` --- #### 3. 高级功能:动态修改 Cron 表达式 如果需要在运行时动态更改任务的时间安排,则可以借助 `ThreadPoolTaskScheduler` 实现[^3]。下面是一个完整的例子: ```java @Service public class DynamicTaskService { @Autowired private ThreadPoolTaskScheduler taskScheduler; private final AtomicReference<ScheduledFuture<?>> scheduledFutureRef = new AtomicReference<>(); public void startDynamicTask() { stopDynamicTask(); scheduledFutureRef.set( taskScheduler.schedule(() -> System.out.println("动态任务执行时间:" + LocalDateTime.now()), new CronTrigger("*/5 * * * * ?"))); // 初始设置每 5 秒触发一次 } public void changeCronExpression(String cronExpr) { stopDynamicTask(); scheduledFutureRef.set( taskScheduler.schedule(() -> System.out.println("更新后的动态任务执行时间:" + LocalDateTime.now()), new CronTrigger(cronExpr))); } public void stopDynamicTask() { ScheduledFuture<?> future = scheduledFutureRef.getAndSet(null); if (future != null && !future.isDone()) { future.cancel(true); } } } ``` 调用该服务类中的方法即可控制任务启动、停止以及动态调整 Cron 表达式。 --- #### 4. 配置说明 为了使 Spring Task 正常工作,通常需要在项目的 `application.properties` 或 `application.yml` 文件中进行一些必要的配置。 ##### (1)启用线程池 默认情况下,Spring Task 使用单一线程处理所有任务。可以通过如下配置增加并发能力[^3]: ```properties spring.task.scheduling.pool.size=5 ``` 这表示最多允许同时运行 5 个任务。 ##### (2)自定义线程池(可选) 对于更复杂的场景,可能需要完全掌控线程池的行为。此时可通过 Java Bean 定义自己的 `TaskScheduler` 实例: ```java @Configuration public class SchedulerConfig { @Bean public TaskScheduler taskScheduler() { ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler(); scheduler.setPoolSize(10); // 设置线程池大小为 10 scheduler.setThreadNamePrefix("task-scheduler-"); return scheduler; } } ``` --- #### 5. 注意事项 - **重复执行问题** 如果发现某些任务被多次执行,请检查是否存在多个应用实例部署的情况。分布式环境下建议引入 Redis 或数据库锁机制防止冲突[^3]。 - **Cron 表达式的正确性** 确保提供的 Cron 表达式语法无误,并且符合预期行为。推荐在线工具验证其合法性。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值