0

バックグラウンドワーカーからコントロールの値を読み取ろうとしています。

バックグラウンドスレッドからコントロールを更新する方法の例はたくさんありますが、それを読み取る方法の例を1つ見つけることができませんでした。

現時点では、backgroundworkerに渡す構造体を作成しましたが、あまりエレガントではないようです。

構造体:

public struct Arguments
    {
        public string version;
        public bool isChecked;

        public Arguments(string Version, bool IsChecked)
        {
            version = Version;
            isChecked = IsChecked;
        }

    }

ボタンクリックイベント

 Arguments pass = new Arguments(Version.Text.Trim(), (bool)Credentials.IsChecked);

 export.RunWorkerAsync(pass);

DoWorkイベント

ExportSolution export = new ExportSolution(this, messageBox);

Arguments pass = (Arguments)e.Argument;

export.Export(pass.version, pass.isChecked);

これは問題なく動作しますが、次のようなことをしたいと思います

DoWorkイベント

 ExportSolution export = new ExportSolution(this, messageBox);             

 export.Export(Access Version.Text.Trim() from here, ditto (bool)Credentials.IsChecked);

TIA

4

2 に答える 2

1

これは私がやったことです:

    string version;
    bool isChecked;

    public MainWindow()
    {
        InitializeComponent();

        this.DataContext = validator;

        //export.DoWork +=new DoWorkEventHandler(export_DoWork);

        export.DoWork += (sender, args) =>
        {
            ExportSolution exports = new ExportSolution(this, messageBox);

            Dispatcher.Invoke((Action)(() => version = Version.Text.Trim()));
            Dispatcher.Invoke((Action)(() => isChecked = (bool)Credentials.IsChecked));

            exports.Export(version, isChecked);
        };
    }

ここで、Versionはテキストボックスで、Credentialsはチェックボックスです。

于 2012-09-17T14:49:02.600 に答える
0

コードビハインドで作業している場合は、DoWorkイベントをLambda式として実行できます。

例えば。

DoWork+=(_,_)=>{...}

次に、labda式の内側にスコープの外側が表示され、Windowsコントロールの名前とボタンが表示されます。

于 2012-09-14T13:56:12.307 に答える