トップページ > プログラム > 2015年07月01日 > kfPim06m

書き込み順位&時間帯一覧

10 位/218 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000000000211000000004



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
ふらっと C#,C♯,C#(初心者用) Part115©2ch.net

書き込みレス一覧

ふらっと 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に入れれば必要ないと思ってました


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。