using System; using System.Collections.Generic; using System.Linq; using System.Net.Http; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using System.Windows.Threading; using System.Threading; using System.IO; namespace TestAsyncHttpClient { /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); t.Interval = TimeSpan.FromMilliseconds(30); t.Tick += t_Tick; t.Start(); save("6666666666666"); } int cnt = 0; object lockObj = new object(); void t_Tick(object sender, EventArgs e) { txt2.Text = "" + DateTime.Now.Ticks;//用于辅助显示是否btnTest_Click 卡住了UI } DispatcherTimer t = new DispatcherTimer(); private async void btnTest_Click(object sender, RoutedEventArgs e) { for (int i = 1; i <= 200; i++) { save("tttttttttt " + i); // sleep("para"+ i); } return; string urlString = string.Empty; using (HttpClient client = new HttpClient()) { //异步获取“http://10.32.112.82/epms/”内容(线程返回)。用户界面依旧可以操作 // urlString = await client.GetStringAsync(@"http://www.cnblogs.com"); await sleep(""); MessageBox.Show("hello"); } // txt.Text = urlString; } StringBuilder sb = new StringBuilder(); async Task sleep(string p) { await Task.Run(() => { lock (lockObj) { cnt++; } sb.Append("-" + cnt); Thread.Sleep(1000); Dispatcher.Invoke(() => { txtLog.AppendText("" + p + " count:" + cnt + "\r\n"); txtLog.ScrollToEnd(); }); }); // MessageBox.Show("hello"); } async void save(string s) { string sFile =AppDomain.CurrentDomain.BaseDirectory + "\\t.txt"; if (File.Exists(sFile) == false) { FileStream fs= File.Create(sFile); fs.Close(); fs = null; } using (Stream stream = File.Open(sFile, FileMode.Append, FileAccess.Write)) { StreamWriter w = new StreamWriter(stream, Encoding.UTF8); w.Write("trrytryrytyryrytrytrrytryrytyryrytrytrrytryrytyryrytrytrrytryrytyryrytrytrrytryrytyryrytrytrrytryrytyryrytrytrrytryrytyryrytrytrrytryrytyryrytrytrrytryrytyryrytrytrrytryrytyryrytrytrrytryrytyryrytrytrrytryrytyryrytrytrrytryrytyryrytry" + s + "\r\n"); w.Close(); stream.Close(); stream.Dispose(); await Task.Delay(200000);//延时这个方法体 } } private void Button_Click_1(object sender, RoutedEventArgs e) { MessageBox.Show(sb.ToString()); } } }
UI
<Window x:Class="TestAsyncHttpClient.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525"> <Grid> <Button Name="btnTest" Content="Test" HorizontalAlignment="Left" Margin="88,54,0,0" VerticalAlignment="Top" Width="192" Height="38" Click="btnTest_Click"/> <TextBox Name="txt" AcceptsReturn="True" HorizontalAlignment="Left" Height="49" Margin="88,226,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="355"/> <TextBox Name="txt2" HorizontalAlignment="Left" Margin="88,10,0,0" TextWrapping="Wrap" Text="TextBlock" VerticalAlignment="Top" Width="288" Height="39"/> <RichTextBox Name="txtLog" Margin="88,111,74,99"/> <Button Content="Button" HorizontalAlignment="Left" Margin="311,54,0,0" VerticalAlignment="Top" Width="111" Height="38" Click="Button_Click_1"/> </Grid> </Window>