武夷山住房和城乡建设局网站神华公司两学一做网站
武夷山住房和城乡建设局网站,神华公司两学一做网站,空包网站怎么做,百度免费做网站异步操作使您能在不阻塞主线程的情况下执行占用大量资源的 I/O 操作。 在 Windows 8.x 应用商店应用或桌面应用中一个耗时的流操作可能阻塞 UI 线程并让应用看起来好像不工作时#xff0c;这种性能的考虑就显得尤为重要了。
从 .NET Framework 4.5 开始#xff0c;I/O 类型包…异步操作使您能在不阻塞主线程的情况下执行占用大量资源的 I/O 操作。 在 Windows 8.x 应用商店应用或桌面应用中一个耗时的流操作可能阻塞 UI 线程并让应用看起来好像不工作时这种性能的考虑就显得尤为重要了。
从 .NET Framework 4.5 开始I/O 类型包括了异步方法以简化异步操作。 异步方法在其名称中包括 Async 例如 ReadAsync、 WriteAsync、 CopyToAsync、 FlushAsync、 ReadLineAsync和 ReadToEndAsync。 这些异步方法基于流类例如 Stream、 FileStream和 MemoryStream和用来向流中读出或写入数据的类例如 TextReader 和 TextWriter实现。
在 .NET Framework 4 和更早的版本中你必须使用 BeginRead 和 EndRead 等方法来实现异步 I/O 操作。 这些方法仍然在当前 .NET 版本中可用从而支持传统的代码但是异步方法能帮助你更轻松地实现异步 I/O 操作。
C# 和 Visual Basic 分别具有两个用于异步编程的关键字 Async (Visual Basic) 或 async (C#) 修饰符您可以用来标记包含异步操作的方法。 Await (Visual Basic) 或 await (C#) 运算符可以应用到异步方法的结果中。
如下面的示例所示若要实现异步 I/O 操作请把这些关键字和异步方法结合使用。
下面的示例演示如何使用两个 FileStream 对象把文件从一个目录异步复制到另一个目录。 需要注意 Click 控件的 Button 事件处理程序具有 async 修饰符标记因为它调用异步方法。
using System;
using System.Threading.Tasks;
using System.Windows;
using System.IO;namespace WpfApplication
{public partial class MainWindow : Window{public MainWindow(){InitializeComponent();}private async void Button_Click(object sender, RoutedEventArgs e){string startDirectory c:\Users\exampleuser\start;string endDirectory c:\Users\exampleuser\end;foreach (string filename in Directory.EnumerateFiles(startDirectory)){using (FileStream sourceStream File.Open(filename, FileMode.Open)){using (FileStream destinationStream File.Create(Path.Combine(endDirectory, Path.GetFileName(filename)))){await sourceStream.CopyToAsync(destinationStream);}}}}}
}下一个例子类似于前面的例子但是使用 StreamReader 和 StreamWriter 对象以异步方式读取和写入文本文件的内容。
private async void Button_Click(object sender, RoutedEventArgs e)
{string UserDirectory c:\Users\exampleuser\;using (StreamReader SourceReader File.OpenText(UserDirectory BigFile.txt)){using (StreamWriter DestinationWriter File.CreateText(UserDirectory CopiedFile.txt)){await CopyFilesAsync(SourceReader, DestinationWriter);}}
}public async Task CopyFilesAsync(StreamReader Source, StreamWriter Destination)
{char[] buffer new char[0x1000];int numRead;while ((numRead await Source.ReadAsync(buffer, 0, buffer.Length)) ! 0){await Destination.WriteAsync(buffer, 0, numRead);}
}下一个示例演示用于在 Windows 8.x 应用商店应用中以 Stream 的形式打开文件的代码隐藏文件和 XAML 文件并且通过使用 StreamReader 类的实例来读取其内容。 它使用异步方法以流的形式打开文件并读取其内容。
using System;
using System.IO;
using System.Text;
using Windows.Storage.Pickers;
using Windows.Storage;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;namespace ExampleApplication
{public sealed partial class BlankPage : Page{public BlankPage(){this.InitializeComponent();}private async void Button_Click_1(object sender, RoutedEventArgs e){StringBuilder contents new StringBuilder();string nextLine;int lineCounter 1;var openPicker new FileOpenPicker();openPicker.SuggestedStartLocation PickerLocationId.DocumentsLibrary;openPicker.FileTypeFilter.Add(.txt);StorageFile selectedFile await openPicker.PickSingleFileAsync();using (StreamReader reader new StreamReader(await selectedFile.OpenStreamForReadAsync())){while ((nextLine await reader.ReadLineAsync()) ! null){contents.AppendFormat({0}. , lineCounter);contents.Append(nextLine);contents.AppendLine();lineCounter;if (lineCounter 3){contents.AppendLine(Only first 3 lines shown.);break;}}}DisplayContentsBlock.Text contents.ToString();}}
}Pagex:ClassExampleApplication.BlankPagexmlnshttp://schemas.microsoft.com/winfx/2006/xaml/presentationxmlns:xhttp://schemas.microsoft.com/winfx/2006/xamlxmlns:localusing:ExampleApplicationxmlns:dhttp://schemas.microsoft.com/expression/blend/2008xmlns:mchttp://schemas.openxmlformats.org/markup-compatibility/2006mc:IgnorabledStackPanel Background{StaticResource ApplicationPageBackgroundBrush} VerticalAlignmentCenter HorizontalAlignmentCenterTextBlock TextDisplay lines from a file./TextBlockButton ContentLoad File ClickButton_Click_1/ButtonTextBlock NameDisplayContentsBlock/TextBlock/StackPanel
/Page
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/92097.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!