我正在尝试使用最新版本的Caliburn Micro在WP7.1 Mango中使用任务启动器,但是一旦任务完成,我的代码就不会被回调。可能我在某个地方做了一些蠢事,但我看不到哪里。以下是我可以从以下网站下载的示例复制应用程序所做的:
http://www.filesonic.com/file/2750397005/PhoneTaskTest.zip
1)创建一个新的WP7.1应用程序;
2)在解决方案中添加一个Lib文件夹,添加CM dll,并添加对它们的引用;
3)更改CM文档指定的生成文件并添加引导程序。
现在到目前为止一切正常,应用程序启动时没有任何问题。然后我做了以下拍照:
4)在主页面中为视图添加一个按钮,在其VM中添加一个名为 TakePhoto 的相应方法。
5)按如下方式更改VM:
a)添加一个在构造函数中注入的只读 IEventAggregator 成员;
b)添加 OnActivate / OnDeactivate 覆盖,让聚合器订阅并取消订阅此VM;
c)添加 TakePhoto 方法:
_aggregator.RequestTask<CameraCaptureTask>();
d)从接口 IHandle&lt; TaskCompleted&lt; CameraCaptureTask&gt;&gt; 派生VM并实现它:
public void Handle(TaskCompleted<CameraCaptureTask> message)
{
if (message.Result.TaskEventArgs.TaskResult != TaskResult.OK) return;
SetPhoto(message.Result.TaskEventArgs.ChosenPhoto);
}
现在,当我点击按钮时,相机任务在模拟器中启动,我可以拍照;然后我回到我的应用程序,但没有任何反应,我的Handle方法永远不会被调用。您可以在那里放置一个断点来确认这一点。 那么,我在这里做错了什么?
答案 0 :(得分:1)
您需要处理TaskCompleted<PhotoResult>
而不是TaskCompleted<CameraCaptureTask>
。因为Caliburn.Micro使用任务的TaskCompleted<T>
事件的事件参数创建Completed
消息,CameraCaptureTask
的情况是PhotoResult。所以你应该实现IHandle<TaskCompleted<PhotoResult>>
,你的Handle方法应该是这样的
public void Handle(TaskCompleted<PhotoResult> message)
{
if (message.Result.TaskResult != TaskResult.OK) return;
SetPhoto(message.Result.ChosenPhoto);
}