Windows 通用應用嘗試開發 「51單片機彙編」總結

1、前言數據庫

  終於完成windows通用應用「51單片機彙編」,半年前開始玩WindowsPhone開發的第一個真正意義上的App(還不少缺點=_=)。開發從1月中旬考完試到今天,期間實習了半個月,玩了幾天,算起來基本弄了3個多星期吧。很少說,總結總結。windows

 

2、開發數據準備app

  應用中主要的數據是單片機的彙編指令,我主要用XML文件來儲存數據,沒有使用SQLLite數據庫,數據格式以下圖:async

xml文件的數據是我手輸入的,因此這是比較煩的。(可能有更簡潔的辦法獲取數據)。ide

  而xml文件每一個每一個節點對應實例,如Code字節下的實例C#代碼以下:工具

 public Code(String uniqueId, String title, String subtitle, String imagepath, String insertTime, String description, String exmaple, String comment,string collectFlag)
        {
            this.UniqueId = uniqueId;
            this.Title = title;
            this.Subtitle = subtitle;
            this.ImagePath = imagepath;
            this.InsertTime = insertTime;
            this.Description = description;
            this.Example = exmaple;
            this.Comment = comment;
            this.CollectFlag = collectFlag;
        }

     
        public Code()
        {
            // TODO: Complete member initialization
        }
        public string UniqueId { get; set; }
        public string Title { get; set; }
        public string Subtitle { get; set; }
        public string ImagePath { get; set; }

        public string InsertTime { get; set; }
        public string Description { get; set; }
        public string Example { get; set; }
        public string Comment { get; set; }
        public string CollectFlag { get; set; }
        public override string ToString()
        {
            return this.Title;
        }
    }

  從xml文件取出數據則利用Linq to Xml,部分C#代碼以下:動畫

 public static async Task<Code> GetCodeAsync(string uniqueId)
        {
            //await _sampleDataSource.GetSampleDataAsync();
            //var matches = _sampleDataSource.Groups.SelectMany(group => group.Items).SelectMany(item=>item.Codes).Where((code)=>code.UniqueId.Equals(uniqueId));
            //if (matches.Count() == 1) return matches.First();
            //return null;
            //Uri dataUri = new Uri("ms-appx:///DataModel/SampleData.xml");
            //StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(dataUri);
            StorageFolder localfolder = ApplicationData.Current.LocalFolder;
            StorageFile XMLfile = await localfolder.CreateFileAsync(FILENAME, CreationCollisionOption.OpenIfExists);
            string xmlText = await FileIO.ReadTextAsync(XMLfile);
            XDocument xmlObject;
            xmlObject = XDocument.Parse(xmlText);
            var data = (from query in xmlObject.Descendants("Code")
                        where query.Element("UniqueId").Value == uniqueId
                        select new Code((string)query.Element("UniqueId"),
                               (string)query.Element("Title"),
                                (string)query.Element("Subtitle"),
                                (string)query.Element("ImagePath"),
                                (string)query.Element("StoreFlag"),
                                (string)query.Element("Description"),
                              (string)query.Element("Example"),
                               (string)query.Element("Comment"),
                               XmlDataService.CheckHasAttributes(query))).FirstOrDefault();
            return data;
        }

PS:本來在程序中,我是直接從 利用Uri:ms-appx:///DataModel/SampleData.xml獲取xml文件,同時後續操做對文件進行數據的改寫,這種辦法在WindowsPhone8.1徹底可行,但在Windows8.1中,該文件是隻讀的,不能這樣操做,不然會出現ACCESSDENY錯誤。我只能在程序第一次啓動時,把SampleData.xml文件複製到LocalFolder裏了,而後App之後對數據進行讀寫,都是對複製的文件進行讀寫(相比讀取Installation裏的文件,讀取LocalFolder的文件,Windows應用沒有發現什麼不一樣,但在WinodwsPhone中,讀取數據的操做相對慢點,在個人Lumia620 內存512M,感受比較卡,不知道有什麼辦法解決)。負責文件操做主要是在App.xaml.cs,C#代碼以下:this

public App()
        {
            this.InitializeComponent();

            if ((string)localsetting.Values["IsHubFirstOpen"] != "true")
            {
                localsetting.Values["IsHubFirstOpen"] = "true";
                LoadXmlFile();
            }
            this.Suspending += this.OnSuspending;
        }
....
 public static async void LoadXmlFile()
        {
            string FILENAME = "CodeCopyFile.XML";
            StorageFolder localfolder = ApplicationData.Current.LocalFolder;
            var dataUri = new Uri("ms-appx:///DataModel/SampleData.xml");
            StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(dataUri);  
            await file.CopyAsync(localfolder, FILENAME, NameCollisionOption.ReplaceExisting);
        }

 

2、對Xml文件數據進行改寫spa

  這個App須要對用戶的數據進行存儲,我直接把用戶本身的數據寫到原文件中,好比App:設計

在Windows8.1中:

在WindowsPhone8.1中:

在兩種平臺都須要把用戶本身的筆記保存下來。這裏主要是對xml文件進行改寫,十分簡單,記錄筆記方法C#代碼以下:

public static async Task<bool> WriteComment(string uniqueId, string comment)
        {
            StorageFolder localfolder = ApplicationData.Current.LocalFolder;
            StorageFile XMLfile = await localfolder.CreateFileAsync(FILENAME, CreationCollisionOption.OpenIfExists);
            using (Stream stream = await XMLfile.OpenStreamForReadAsync())
            {
                XDocument xmlObject = XDocument.Load(stream);
                foreach (var codeValue in xmlObject.Descendants("Code").ToArray())
                {
                    if ((string)codeValue.Element("UniqueId") == uniqueId)
                    {
                        using (Stream newstream = await XMLfile.OpenStreamForWriteAsync())//這裏須要注意,在修改編輯已存在的xml文件時須要設置Length=0,position=0,從新寫。
                        {
                            DateTime time = DateTime.Now;
                            var insertTime = string.Format("修改時間:{0}年{1}月{2}日 {3}:{4}", time.Year, time.Month, time.Day, time.TimeOfDay.Hours, time.TimeOfDay.Minutes);
                            codeValue.SetElementValue("Comment", comment);
                            codeValue.SetElementValue("StoreFlag", insertTime);//修改時間
                            newstream.SetLength(0);
                            xmlObject.Save(newstream);
                            //   await newstream.FlushAsync();
                        }
                        return true;
                    }
                }
            }


            return false;
        }

 

3、UI

  本應用後臺核心代碼基本是對數據進行讀寫,這部分代碼寫好後,我就進行兩個平臺的UI設計了,說實話比較喜歡UI設計,挺好玩的。由於最開始學的就是WindowsPhone,WindowsPhone平臺上的UI設計比較熟悉,比較快弄好,可是弄好後,一些界面在不一樣分辨率的模擬器手機會有點不一樣呈現,還須要以後的修改,比較喜歡本身設計的這個頁面:

感受挺好的。

  至於Windows8.1,以前沒有學過開發windowsApp,比較費力,並且該應用在Windows上體驗應該比較差吧,若屏幕縱向,徹底不能看的節奏。在設計在Windows的App的 UI時,不少參考了@MS-UAP  http://www.cnblogs.com/ms-uap/  上面博客園的通用應用設計,好比TopBar基本是用MS-UAP的。

 

4、後續

  後續的話,代碼整理整理。還有設計方面,在應用上小細節加一些WPF動畫,感受挺炫的;應用功能方面,還能夠增長單片機定時器、串口速率等計算工具...弄完了,爽!!最後祝你們羊年快樂,心願成真,身體健康。祝本身在大三下學期找個好實習,大四找個好工做,萬事如意!!!

 

你們感興趣的能夠,下載看看,初次開發,多多建議!

51單片機彙編 Windows Store 連接 :http://apps.microsoft.com/windows/app/51/b8ffef35-7fa7-45d5-9cd5-f2672bf9a8fe

51單片機彙編 WindowsPhone Store 連接:http://www.windowsphone.com/s?appid=3519c5ac-f013-4663-8eb9-fd536fdd8c8f

51單片機彙編 代碼:http://pan.baidu.com/s/1sjpyXat   密碼:7e6l

相關文章
相關標籤/搜索