您的位置:首页 > 大数据 > 人工智能

Windows Mobile开发的一些小技巧

2012-06-01 15:14 351 查看
1.如何真正的退出程序,而不是隐藏窗体?

Windows Mobile中当你点击X的时候,并不是真正的关闭窗体,而是隐藏窗体,需要在应用程序的每个Form中调用一个函数才可以。


        private void InfoMain_Closed(object sender, EventArgs e)




        {


            Application.Exit();


        }

每个窗体的Closed事件中加入Application.Exit();才能真正的退出程序。

2.如何让窗体跟着输入法窗口上移

当输入文字时需要打开输入法,而当打开输入法的时候输入法会直接盖掉下层的程序界面,导致有时候窗体下方的控件无法进行操作(输入文字,点击按钮等),那么这个时候就需要我们在输入法状态变更的时候出发一些事件,让输入法窗口不要盖住程序。

首先每次创建Form,最好都先添加一个panel做控件的上层容器,设定好相对panel的位置,这样控件才会根据panel的变化而变化。之后给InputPanel的EnabledChanged事件加入下面的代码:


        private void inputPanel1_EnabledChanged(object sender, EventArgs e)




        {


            if (inputPanel1.Enabled)




            {


                this.panel1.Dock = DockStyle.None;


                this.panel1.Height = inputPanel1.VisibleDesktop.Height;


            }


            else




            {


                this.panel1.Dock = DockStyle.Fill;


            }


        }
当输入法打开的时候panel不再占据全屏,而是跟除了输入法外的可视化范围一样高。输入法关闭时,panel恢复占据全屏。当然panel的AutoScroll要设定为true。

3.如何创建非全屏Form?

首先需要你创建一个全屏的Form,然后将以下参数设定为指定值

ControlBox = false;

FormBorderStyle = none;

MinimizeBox = false;

WindowState = normal;

Size = 设置为你想要的大小即可。

这样的非全屏窗体不带边框不带标题,只有一个光秃秃的Form。如果你需要那些边框和标题使得界面更加美观,则可以参考以下文章:
http://www.christec.co.nz/blog/archives/134
牵扯到了一些对底层的操作。

4.【实用技巧】Windows Mobile 手机连接电脑时,如何使用GPRS上网,同时跟电脑保持连接。(USB和GPRS共存问题)
(3-19 22:08)

5.如何提高Windows Mobile中 Http上传文件的稳定性?


其实上传文件最好还是用FTP,因为比较稳定,各方面也很成熟。如果是和业务系统相关的一些东西,也不要紧,客户端上传完成之后请求下服务端的一个服务,通知他业务数据上传完毕,然后服务端去做一些操作,之后可以回应给客户端就可以了。

但如果非要用HTTP的话,也不要紧,虽然无线网络用HTTP传输文件不是太稳定,但总体上还是不错的,只是你需要设计一套断点续传机制,来保证就算网络发生异常了,也可以接着上次的再传。除了使用断点续传机制,还有一个技巧,就是让客户端和服务端的连接超时时间(ConnectionTimeout)尽可能的长些,比如设置为200秒,这是在开发过程中总结出来的,我测试过很多次,发现如果超时时间很长的话,多数大文件(> 500kb)其实一次就可以传递上去,之前传不上去,多数是因为连接超时,而服务端如果使用tomcat,抛出Socket
read timeout异常之后,客户端多数收不到,因为此时的客户端还在朝Request中的Outputstream写数据,还没有走到request.GetResponse()这一步,这就造成了,客户端发送完数据之后才知道客户端异常了,浪费了很多流量,也降低了很多效率,大家可以注意一下。

6.如何建立GPRS连接?

移动:
 

XmlDocument configDoc = new XmlDocument();

configDoc.LoadXml(

                        "<wap-provisioningdoc>" +

                        "<characteristic type=\"CM_GPRSEntries\">" +

                        "<characteristic type=\"xxx\">" +

                        "<parm name=\"DestId\" value=\"{ADB0B001-10B5-3F39-27C6-9742E785FCD4}\" />" +

                        "<parm name=\"UserName\" value=\"1\" />" +

                        "<parm name=\"Password\" value=\"1\" />" +

                        "<parm name=\"Domain\" value=\"\" />" +

                        "<characteristic type=\"DevSpecificCellular\">" +

                        "<parm name=\"GPRSInfoValid\" value=\"1\" />" +

                        "<parm name=\"GPRSInfoAccessPointName\" value=\"xx.js\" />" +

                        "</characteristic>" +

                        "</characteristic>" +

                        "</characteristic>" +

                        "</wap-provisioningdoc>"

                        );

ConfigurationManager.ProcessConfiguration(configDoc, false);

电信:
XmlDocument configDoc = new XmlDocument();

configDoc.LoadXml(

                        "<wap-provisioningdoc>" +

                        "<characteristic type=\"CM_GPRSEntries\">" +

                        "<characteristic type=\"jsmsa\">" +

                        "<parm name=\"DestId\" value=\"{ADB0B001-10B5-3F39-27C6-9742E785FCD4}\" />" +

                        "<parm name=\"UserName\" value=\"xxxx.js\" />" +

                        "<parm name=\"Password\" value=\"xxxx\" />" +

                        "<parm name=\"Domain\" value=\"\" />" +

                        "<parm name=\"Phone\" value=\"#777\"/>" +

                        "<parm name=\"DeviceType\" value=\"modem\"/>" +

                        "<parm name=\"DeviceName\" value=\"Cellular Line\"/>" +

                        "<parm name=\"Enabled\" value=\"1\"/>" +

                        "<parm name=\"RequirePw\" value=\"1\"/>" +

                        "<parm name=\"DeviceSpecificRAW\" value=\"b4010000b4010000b4010000010000000f0000000100000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"/>" +

                        "</characteristic>" +

                        "</characteristic>" +

                        "</wap-provisioningdoc>"

                        );

ConfigurationManager.ProcessConfiguration(configDoc, false);

修改连接的优先级:

 string configpreferred = " <wap-provisioningdoc> " +

                                         " <characteristic   type=\"cm_planner\"> " +

                                         " <characteristic   type=\"preferredconnections\"> " +

                                         " <parm   name=\"{ADB0B001-10B5-3F39-27C6-9742E785FCD4}\"    value=\"jsmsa\"   /> " +

                                         " </characteristic> " +

                                         " </characteristic> " +

                                         " </wap-provisioningdoc> ";

7.发起和断开连接

这两个方法需要另外两个类的协助

  public static void MakeConnection()

        {

            try

            {

                ConnectionManager connectManager = new ConnectionManager();

                int idx = -1;

                List<ConnectionManager.CONNMGR_DESTINATION_INFO> lstIdentifiers = connectManager.EnumConnDestinations();

                for (int i = 0; i < lstIdentifiers.Count; i++)

                {

                    if ("Internet 连接".Equals(lstIdentifiers[i].Description))

                    {

                        idx = i;

                        break;

                    }

                }

                if (idx > -1)

                {

                    connectManager.EstablishConnection((uint)idx);

                }

            }

            catch

            {

            }

        }

 
        public static void Disconnect()

        {

            try

            {

                RASManager.RASCONN[] conns = RASManager.GetRASConnections();

                if (conns != null && conns.Length > 0)

                {

                    foreach (RASManager.RASCONN conn in conns)

                    {

                        try

                        {

                            RASManager.HangUp(conn.hRasConnHandle);

                        }

                        catch (Exception ex)

                        {

                        }

                    }

                }

            }

            catch

            {

            }

        }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息