zoukankan      html  css  js  c++  java
  • C#第八节课

    先说一个最近会用了的东西

    前几篇博客中提到了一个关键字

    async
    

      当时并不清楚这货是干嘛用的只是知道这个和异步有关

    随着实验和自学以及老师上课的深入明白了这个async的具体用法

    废话不多。上例子

    private async void Button_Click(object sender, RoutedEventArgs e)
    {
        int p = 0;//今天的花销求个sum
        string val = "今日已花";
        val += p.ToString();
        val += "元";
        var messageDialog = new MessageDialog("操作成功",val);
        await messageDialog.ShowAsync();
    
    }
    

      

    这里引用一段我实验中的代码,这里是弹一个对话框,调用了异步private 后面async声明一下然后哪一条语句异步调用就在前面加一个await。这样这条语句就不会占用主线程

    关于实现我问老师老师说是会自动生成一个额外的thread用来完成await里面的语句

    这样就省去了写thread的麻烦

    非常方便。。。

    顺带还是上面的代码可以调出dialog。。这个dialog也是用处多多,而且非常实用。

    这里可以看到效果,里面还有一个自带的关闭按钮,异常实用代码实现也很简单

    再提一句binding。。。上周也说了一点

    binding的好处其实不只是可以自动绑定后台数据,而且很智能,假如我有8个按钮8个text要显示,并且格式内容基本一样

    那么我们就可以设计一个binding,然后datasource里面有8个数据(要绑定的)就可以了

    会自动的把datasource里面所有的内容全部显示

    以及datasource里面的点击事件也不需要写很多,只要对item写一个点击事件,然后可以通过传递信息来判断自己点击的是哪个按钮就可以了

    比如

    void ItemView_ItemClick(object sender, ItemClickEventArgs e)
    {
      // 导航至相应的目标页,并
      // 通过将所需信息作为导航参数传入来配置新页
      var itemId = ((SampleDataItem)e.ClickedItem).UniqueId;
      this.Frame.Navigate(typeof(ItemDetailPage), itemId);
    }
    

      这里就是通过itemId进行跳转

    不需要对于每一个item写点击事件

    也是省代码的大杀器

    上节课老师讲了关于stream的用法,C#中有非常多的Stream,stream用来读/写 文件/数据等,有fileStream啊bufferedstream对应各种格式各种情况下的输入输出需求。。。。正好这里把第一次实验中的一些Stream的用法记录一下

    第一次实验要从文件中读取信息并且要用byte存,开始想的是将每一位读进来自己进行计算二进制,后来经过答疑知道原来可以用二进制

    当然那是reader的事儿了。。。

    贴代码再说

    static void Main(string[] args)
            {
                byte bYte;
                ushort CRC = 0xffff;
                string paPath = "";
                FileStream fStream = new FileStream(args[0], FileMode.Open, FileAccess.Read);
                BinaryReader binRead = new BinaryReader(fStream);
                try
                {
                    while (true)
                    {
                        bYte = binRead.ReadByte();
                        ClacCRC used = new ClacCRC();
                        CRC = used.CRCValue(CRC, bYte);
                    }
                }
                catch (EndOfStreamException e)
                {
                    ushort CRCexchange1 = (ushort)(CRC & 0xff00);
                    ushort CRCexchange2 = (ushort)(CRC & 0xff);
                    CRCexchange1 = (ushort)(CRCexchange1 >> 8);
                    CRCexchange2 = (ushort)(CRCexchange2 << 8);
                    CRC = (ushort)(CRCexchange1 | CRCexchange2);
                    Console.WriteLine("{0:x}", CRC);
                    Console.ReadLine();
                }
            }

    这里可以看到我们Stream的用法,以及要注意如果要读到文件尾部我们需要进行一个try catch的操作来防止EndOfStreamException的出现。。。

    而且似乎并没有一个函数判断当前是否读入到了文件尾。。一般都是这么操作的(也许有我不知道。。。求教)

    其他的stream比如bufferedstream是用来封装其他stream的。。。目前没怎么用过。。。前面那个用法也是查到的

    还有一些类似networkstream的用来网络交互,留待用到时再更新(又挖坑)

    回顾一下这次主要说到了binding,stream和异步线程,异步其实正常应该用tread来实现,async我觉得就是个偷懒。。。thread的使用也是很重要的。!就到这里

    下期再见!

  • 相关阅读:
    linux上配置apache实现二级域名访问目录
    C++数组的使用
    linux 上安装C++编译环境
    qt下qmake:提示could not exec '/usr/lib/x86_64-linux-gnu/qt4/bin/qmake': No such file or directory
    Qt4.8.5移植
    oracle使用已有vid快速新建虚拟机
    各种编程语言鸡汤网站
    linux下 git使用小记下
    CodeForces-650B Image Preview 二分+模拟
    HDU-6351 Beautiful Now 全排列暴力
  • 原文地址:https://www.cnblogs.com/Durandal/p/4494303.html
Copyright © 2011-2022 走看看