其实MediaCenter的模式于asp.net的方式非常相似,C#代码相当于MCML代码部分的后台。其实这一部分的内容不需要了解很多就可以上手写MC的程序了,扫一遍API也就基本上可以了。
贴上这部分的整理结果。
MediaCenter编程C#
MCML与C#通过.net properties进行通信
MCMl不能使用C#的变量,只能定义properties 含有get和set的
它应该是基于ModeItem并且在set里应该包含FirePropertyChanged
Session class
程序的入口类 维护状态和数据以及一些选项
media center程序创建时将创建两个类
第一个是Session class继承ModeItem它将维持在一个media center程序的整个生命周期
第二个是一个继承了IAddinModule和IAddInEntryPoint的类
它将实现IAddinModule的Intialize和Unintialize两个接口
和IAddInEntryPoint的Launch一个接口
Intialize和Unintialize
在程序启动和结束时调用,Intialize里不要做过多的加载工作,它会阻塞显示直到它执行完返回
甚至一个小的操作都可能导致Media Center报告程序被锁死
在保存一些数据的时候会经常发生这种找不到程序的情况
Launch
新的MCML要被显示或者一些参数传递给程序是将调用词函数
同样的 ,这个函数里不要做太多的操作
一般情况是新建一个PageSession后就立即返回
PageSession
每个程序至少包含一个,负责跟踪程序进程
经常用到的一个是HistoryOrientedPageSession
它将记录用户的浏览轨迹等很多信息并且支持backspace之类的回退命令
事实上用户的界面显示是从这个类开始的 通过调用接口Navigate
一个程序需要的基本类和接口代码:
Public class Base:IAddInModule, IAddInEntryPoint
{
Public static HistoryOrientedPageSeeion History;
Public void Intialize(Dictionary<String, Objiect> appInfo,
Dictionary<String,Object> entryPointInfo)
{}
Public void Unintialize()
{}
Public void Launch(AddInHost host)
{
History = new HistoryOrientedPageSession();
History.Go(“resx://Assm………”);
}
}
程序被拉起时,先调用Intialize 然后调用Launch
创建一个HistoryOrientedPageSession 开始记录管理我们的路径
然后进入mcml页
最后程序退出时 将调用Unintialize 可以把没有做完的事情放在这里做,但是还是尽量使其操作越少越好!!!