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