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的使用也是很重要的。!就到这里

下期再见!

posted on 2015-05-11 13:21  Snorlax  阅读(172)  评论(0编辑  收藏  举报