windows phone 8的异步编程
关于windows phone 8 中的高级编程<异步编程>
同步方法和异步方法的区别
同步方法调用在程序继续执行之前需要等待同步方法执行完毕返回结果
异步方法则在被调用之后立即返回以便程序在被调用方法完成其任务的同时执行其它操作
下面的实现代码和效果
第一:
我们前台的设计.
代码如下:
1 <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> 2 <Button Content="同步操作" FontSize="25" HorizontalAlignment="Left" Margin="24,10,0,0" VerticalAlignment="Top" Height="93" Width="404" Click="Button_Click_1"/> 3 <Button Content="异步操作" Margin="24,84,28,435" FontSize="25" Click="Button_Click_2"/> 4 <Button Content="添加" FontSize="25" HorizontalAlignment="Left" Margin="24,152,0,0" VerticalAlignment="Top" Height="105" Width="206" Click="Button_Click_3"/> 5 <ListBox Name="listbox01" Margin="24,359,28,42"/> 6 <TextBox Name="textbox01" HorizontalAlignment="Left" Height="92" Margin="24,262,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Width="404"/> 7 <Button Content="显示" FontSize="25" HorizontalAlignment="Left" Margin="210,152,0,0" VerticalAlignment="Top" RenderTransformOrigin="0.367,0.111" Height="105" Width="218" Click="Button_Click_4"/> 8 </Grid>
后台代码: 1 /// <summary>
1 /// <summary> 2 /// 这是用来测试的数组 3 /// </summary> 4 private int []Peng = new int[]{1,3212,123123,4321,5,6,7,8,234,75,123,75,21,312,643,641,123,2}; 5 private void Button_Click_1(object sender, RoutedEventArgs e) 6 { 7 //Task同步的实现的工厂的委托给我下面写到的LongTime的方法 8 var someTake = Task<int>.Factory.StartNew(() => LongTime(1, 2)); 9 //同时打印出来 10 MessageBox.Show("Result:"+someTake.Result.ToString()); 11 } 12 /// <summary> 13 /// 用于委托的方法 14 /// </summary> 15 /// <param name="a"></param> 16 /// <param name="b"></param> 17 /// <returns></returns> 18 private int LongTime( int a, int b) 19 { 20 //让程序延迟2秒 21 Thread.Sleep(3000); 22 return a + b; 23 } 24 /// <summary> 25 /// 异步方法的实现 26 /// </summary> 27 /// <param name="sender"></param> 28 /// <param name="e"></param> 29 private async void Button_Click_2(object sender, RoutedEventArgs e) 30 { 31 Debug.WriteLine("处理同步的事件"); 32 var someTake = Task<int>.Factory.StartNew(()=>LongTime(1,2)); 33 //异步的操作 34 int cout=await someTake; 35 cout += cout; 36 Debug.WriteLine("任务返回,再次回到调用的线程"); 37 MessageBox.Show("Resutl:"+someTake.Result.ToString()+" "+cout); 38 } 39 /// <summary> 40 /// 向App.situation集合添加内容 41 /// </summary> 42 /// <param name="sender"></param> 43 /// <param name="e"></param> 44 private void Button_Click_3(object sender, RoutedEventArgs e) 45 { 46 string Name=textbox01.Text; 47 //这是生命在App.xmal.cs中的一个字段 48 App.situation = new List<string>(); 49 App.situation.Add(Name); 50 } 51 /// <summary> 52 /// 点击自己实现线程的异步操作 53 /// </summary> 54 /// <param name="sender"></param> 55 /// <param name="e"></param> 56 private void Button_Click_4(object sender, RoutedEventArgs e) 57 { 58 //这是实现我们线程自己来时实现异步线程操作 59 try 60 { 61 var mytest2 = App.situation.Select((Name) => Name.ToLower());//实现把大写的都转换为小写的 62 foreach (var item in mytest2) 63 { 64 Debug.WriteLine(item.ToString()); 65 } 66 listbox01.ItemsSource = mytest2; 67 } 68 catch (Exception) 69 { 70 return; 71 } 72 73 }
下面代码的是生命在App.xmal.cs中的文件下的因为每一个窗体都继承了他所以我们在里面添加一个字段也是可以的
App.situation = new List<string>();
下面是APP.xmal.cs文件插入的代码
public static List<string> situation;
实现的效果如下
同步操作图 | 异步点击图 | textbox写入值 | 自己实现的简单线程异步 |
今天到这。。。精彩还在后面。。。亲。。请继续关注。。。从现在起你的相信你自己你的别谁都要强。。。好好来体验程序带来的乐趣吧。。。其乐无穷