WinCE开发随笔(一)

 

1、 WinCE项目中如何确定窗体自身是否是当前的顶层窗体?

答:先获取自身的窗口句柄,然后通过API函数GetForegroundWindow获取当前顶层窗口句柄,比较两个句柄是否一致。

注意在CF1.0中,.NET没有提供Form.Handle属性,获取窗口的句柄也必须借助于API函数FindWindow,步骤如下:

a.       用变量保存窗口的标题即Form.Text

b.       为避免窗口标题重复,将窗口的标题改为一个GUID或其他比较唯一的标题

c.       通过FindWindow搜索修改标题后的窗口的句柄

d.       恢复窗口的标题

2、 如何获取应用程序当前的物理路径?

答:在WinCE中-

System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase);

Windows中-AppDomain.CurrentDomain.BaseDirectory

3、 Pocket PC设备中的窗口的关闭按钮功能是最小化窗口或者说将窗口置于后台,而不是结束进程;

4、 为什么定时器函数中的异常不能在窗口函数中捕获?

答:定时器线程是由系统启动的,他的异常直接抛给了调用他的系统线程,因此不能在窗口函数中捕获到异常。推广而言,异常是不能跨线程捕获的。

5、 为什么WinCE程序中重写组件的的Dispose方法没有效果?

答:CF1.0中的Component类并没有实现IDisposable接口,它及其子类的Dispose方法是受保护成员,且似乎并不在垃圾回收的时候自动调用;

6、 能否在ASP.NET程序中创建一个线程并在该线程中访问Session

答:不能。Session机制使用了线程槽,因此不能跨线程访问。

7、 如何在WinCE设备上部署全局程序集缓存?

答:请参考

ms-help://MS.MSDNQTR.v80.chs/MS.MSDN.v80/MS.VisualStudio.v80.chs/dv_fxnetcf/html/5aa081e4-13b3-4646-a391-9c184394ac62.htm

需要注意的是,假设我们用一个cab文件部署全局程序集缓存,则该全局程序集的更新版本不能通过原有的cab直接部署。要解决这个问题我们需要修改CAB中的.gac文件以便让.NET的进程知道.gac文件已经变化。

8、 XML的处理可以使用XPath来简化,处理XML可以像处理数据库一样使用XPath查询定位。

9、 如何在一个安装包中同时安装两个Web应用程序?

答:目前VS自带的web安装项目不支持两个项目一次性安装或者说支持不好(比如为每个Web指定虚拟路径等),我们可以通过以下方法来实现:

a.       使用部署项目模板的windows安装项目,并把需要的文件都安装到应用程序文件夹下

b.       创建自定义安装类,为目标机器的两个文件夹创建web共享

如何创建虚拟目录可以参考

ms-help://MS.MSDNQTR.v80.chs/MS.MSDN.v80/MS.NETDEVFX.v20.chs/cpref8/html
/T_System_EnterpriseServices_Internal_IISVirtualRoot.htm

http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev
/Vsvbtchusingcustomactionstomodifyinternetinformationserverduringdeployment.mspx?mfr=true

10、              为什么我的设备控件的属性在设计时不能显示?

答:一般来说,VS2005下控件的属性包括自定义类型的属性都是可以直接在设计时的属性窗口中看到的,但下面的情况会影响属性的显示:

但控件所在的dll中出现了DllImport C#属性时候,自定义类型的控件属性就不能正常显示在属性窗口了。

注:原因或者解决办法目前未知。(可以使用设计时属性DesktopCompatible解决

11、               

你可能感兴趣的:(WinCE)