概要
- WebBrowserクラスを使用したスクレイピング中、特定の要素を見つけたときユーザ向けの画面を切り替えてパスワードを入力させます。
- 入力後画面切り替え直後の処理を実行したいです。
- 現状処理を続行させることができず、ユーザが情報入力後画面切り替え直後の処理と全く同じ処理を変えた別メソッドを呼んでいます。
- これをユーザの入力後、処理を再開できるように修正したいのですが方法が見つかりません。
ソースコード
csharp
1// main.cs 2public void Click_DownloadFiles(object sender, RoutedEventArgs) e 3{ 4 // ユーザ向かいには「処理中」のような画面が出ている状態です。 5 A(); 6 7 // WebBrowserクラスを使用したスクレイピング処理中で、 8 // 特定の要素(パスワード入力画面入力フォームなどを見つけるとユーザに画面を返します。) 9 if (elementExist()) 10 { 11 url = string.Format("views/Pages/PasswordInput.xaml") 12 Frame.MainFrame.Navigate(new URI(url, UriKind.Relative)); 13 return; 14 } 15 // 入力後ここから処理を再開したい… 16 B(); 17} 18 19 20public void Click_DownloadFilesAfterInput(object sender, RoutedEventArgs) e 21{ 22 // 現状は入力が終わったら押すボタンを分けて別メソッドに元の処理の続きをコピーしている 23 B(); 24} 25
c#
1// PasswordInput.xaml.cs 2private void PasswordBoxChanged(object sender, RoutedEventArgs e) 3{ 4 if (this.DataContext != null) 5 { 6 // ユーザの入力を保持 7 ((dynamic)this.DataContext).Password = ((PasswordBox)sender).SecurePassword; 8 } 9} 10 11private void Click_DownloadFilesAfterInput(object sender, RoutedEventArgs e) 12{ 13 if (this.DataContext != null) 14 { 15 // メイン処理のクラスに戻る 16 ((dynamic)this.DataContext).Click_DownloadFilesAfterInput(sender, e); 17 Button_DownloadFiles.IsEnabled = false; 18 } 19} 20 21
試したこと
- returnを使ったらメインの処理から抜けてしまうので使ったら無理そうです。
- goto文を使う
csharp
1// main.cs 2public void Click_DownloadFiles(object sender, RoutedEventArgs) e 3{ 4 if (State == "PW" ) goto pw; 5 A(); 6 7 // WebBrowserクラスを使用したスクレイピング処理中で、 8 // 特定の要素(パスワード入力画面入力フォームなどを見つけるとユーザに画面を返します。) 9 if (elementExist()) 10 { 11 url = string.Format("views/Pages/PasswordInput.xaml") 12 Frame.MainFrame.Navigate(new URI(url, UriKind.Relative)); 13 return; 14 } 15 // 入力後ここから処理を再開したい… 16 pw; 17 B(); 18} 19
c#
1// PasswordInput.xaml.cs 2private void PasswordBoxChanged(object sender, RoutedEventArgs e) 3{ 4 if (this.DataContext != null) 5 { 6 ((dynamic)this.DataContext).Password = ((PasswordBox)sender).SecurePassword; 7 } 8} 9 10private void Click_DownloadFilesAfterInput(object sender, RoutedEventArgs e) 11{ 12 if (this.DataContext != null) 13 { 14 ((dynamic)this.DataContext).State = "PW"; 15 ((dynamic)this.DataContext).Click_DownloadFilesAfterInput(sender, e); 16 Button_DownloadFiles.IsEnabled = false; 17 } 18} 19 20
※ 処理は続行できるようになるものの、メインの処理でもともと定義していた変数参照できなくなる…
動作環境
- WPFアプリケーション
- .NET Frame Work 4.5
- Visual Studio2013
という状態です。よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー