- ふらっと C#,C♯,C#(初心者用) Part115©2ch.net
888 :デフォルトの名無しさん[sage]:2015/07/01(水) 13:39:30.86 ID:kfPim06m - WPFでボタンをクリックするとウェブページを非同期で取得するプログラムを
書いたのですが 自作ライブラリ内でこのように記述するとtask.Wait();でGUIが応答しなくなります var task=GetWebPageAsync(webUri); task.Wait(); string htmlText = task.Result ; 処理を追ってみるとGetWebPageAsyncメソッド内の下記の部分のあと GUIが表示され処理が中断されるみたいです HttpResponseMessage res = await client.GetAsync(uri); 理由がよくわからないまま string htmlText= await GetWebPageAsync(webUri); と書き直すと処理が実行されました 何が問題なのでしょうか
|
- ふらっと C#,C♯,C#(初心者用) Part115©2ch.net
890 :デフォルトの名無しさん[sage]:2015/07/01(水) 13:59:45.12 ID:kfPim06m - もう一つわからないのが>>888で取得したデータを
HogeItemsに設定してListBoxにバインドしているのですが ListBoxに表示されません ページの取得とプロパティの値に設定は出来ています MVVMフレームワークとしてPrismを使用してます <ListBox ItemsSource="{Binding HogeItems}" Height="500"> <ListBox.ItemTemplate> <DataTemplate> <TextBlock Text="{Binding Title}"/> </DataTemplate> </ListBox.ItemTemplate> </ListBox> コンストラクタ内 SearchCommand = new DelegateCommand(() => {HogeSearch();}); private async void HogeSearch(){ var list = await Hoge.SearchAsync(); this.HogeItems = new ObservableCollection<HogeItem>(list);}
|
- ふらっと C#,C♯,C#(初心者用) Part115©2ch.net
891 :デフォルトの名無しさん[sage]:2015/07/01(水) 14:22:19.59 ID:kfPim06m - >>889
それが下記サイトを参考にコンソールアプリで作っていたときは 問題なくタスク完了したのですが WPFで利用するとGUIがフリーズしてタスクが完了しません フリーズするだけならわかりますが、タスクが完了しないのがなぜなのかわかりません .NET TIPS:Html Agility Packを使ってWebページをスクレイピングするには?[C#、VB] - @IT http://www.atmarkit.co.jp/ait/articles/1501/27/news140.html .NET TIPS:HttpClientクラスでWebページを取得するには?[C#、VB] - @IT http://www.atmarkit.co.jp/ait/articles/1501/06/news086.html 上のページから抜粋 webTask.Wait(); // Mainメソッドではawaitできないので、処理が完了するまで待機する
|
- ふらっと C#,C♯,C#(初心者用) Part115©2ch.net
893 :デフォルトの名無しさん[sage]:2015/07/01(水) 15:38:30.48 ID:kfPim06m - HogeItemのプロパティに変更通知を設定しないとだめだったんですね
ObservableCollectionに入れれば必要ないと思ってました
|