概要

  • WebBrowserクラスを使用したスクレイピング中、特定の要素を見つけたときユーザ向けの画面を切り替えてパスワードを入力させます。
  • 入力後画面切り替え直後の処理を実行したいです。
  • 現状処理を続行させることができず、ユーザが情報入力後画面切り替え直後の処理と全く同じ処理を変えた別メソッドを呼んでいます。
  • これをユーザの入力後、処理を再開できるように修正したいのですが方法が見つかりません。

ソースコード

main.cs

public void Click_DownloadFiles(object sender, RoutedEventArgs e)
{
    // ユーザ向かいには「処理中」のような画面が出ている状態です。
    A();

    // WebBrowserクラスを使用したスクレイピング処理中で、
    // 特定の要素(パスワード入力画面入力フォームなどを見つけるとユーザに画面を返します。)
    if (elementExist())
        {
            url = string.Format("views/Pages/PasswordInput.xaml")
            Frame.MainFrame.Navigate(new URI(url, UriKind.Relative));
            return;
        }
    // 入力後ここから処理を再開したい…
    B();
}


public void Click_DownloadFilesAfterInput(object sender, RoutedEventArgs) e
{
    // 現状は入力が終わったら押すボタンを分けて別メソッドに元の処理の続きをコピーしている
    B();
}

PasswordInput.xaml.cs

private void PasswordBoxChanged(object sender, RoutedEventArgs e)
{
    if (this.DataContext != null)
    {
        // ユーザの入力を保持
        ((dynamic)this.DataContext).Password = ((PasswordBox)sender).SecurePassword;
    }
}

private void Click_DownloadFilesAfterInput(object sender, RoutedEventArgs e)
{
    if (this.DataContext != null)
    {
        // メイン処理のクラスに戻る
        ((dynamic)this.DataContext).Click_DownloadFilesAfterInput(sender, e);
        Button_DownloadFiles.IsEnabled = false;
    }
}

試したこと

  • returnを使ったらメインの処理から抜けてしまうので使ったら無理そうです。
  • goto文を使う

    main.cs

    public void Click_DownloadFiles(object sender, RoutedEventArgs e)
    {
        if (State == "PW" ) goto pw;
        A();
    
        if (elementExist())
            {
                url = string.Format("views/Pages/PasswordInput.xaml")
                Frame.MainFrame.Navigate(new URI(url, UriKind.Relative));
                return;
            }
        // 入力後ここから処理を再開したい…
        pw:
        B();
    }
    

    PasswordInput.xaml.cs

    private void PasswordBoxChanged(object sender, RoutedEventArgs e)
    {
        if (this.DataContext != null)
        {
            ((dynamic)this.DataContext).Password = ((PasswordBox)sender).SecurePassword;
        }
    }
    
    private void Click_DownloadFilesAfterInput(object sender, RoutedEventArgs e)
    {
        if (this.DataContext != null)
        {
            ((dynamic)this.DataContext).State = "PW";
            ((dynamic)this.DataContext).Click_DownloadFilesAfterInput(sender, e);
            Button_DownloadFiles.IsEnabled = false;
        }
    }
    

※ 処理は続行できるようになるものの、メインの処理でもともと定義していた変数参照できなくなる…

という状態です。よろしくお願いします。