从WPF中的backgroundworker线程读取控制值

从WPF中的backgroundworker线程读取控制值,wpf,wpf-controls,Wpf,Wpf Controls,我正试图从后台工作人员那里读取控件的值 有很多关于如何从后台线程更新控件的示例,但我还没有找到一个关于如何从中读取控件的示例 目前,我已经创建了一个要传递给backgroundworker的结构,但它似乎不是很优雅 结构: public struct Arguments { public string version; public bool isChecked; public Arguments(string Version, bool

我正试图从后台工作人员那里读取控件的值

有很多关于如何从后台线程更新控件的示例,但我还没有找到一个关于如何从中读取控件的示例

目前,我已经创建了一个要传递给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);
嫁妆活动

ExportSolution export = new ExportSolution(this, messageBox);

Arguments pass = (Arguments)e.Argument;

export.Export(pass.version, pass.isChecked);
这很好,但我想做以下或类似的事情

嫁妆活动

 ExportSolution export = new ExportSolution(this, messageBox);             

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

TIA

如果您正在处理代码隐藏,则可以将DoWork事件作为Lambda表达式执行

例如


然后在labda表达式中,您可以看到外部作用域,您可以看到windows控件的名称和按钮B。

这就是我最后要做的:

    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是复选框。

您需要从后台线程访问它们以获取最新信息吗?或者你只是想通过不必为DoWork参数创建类或结构来节省时间?我认为不为DoWork参数创建类或结构会更优雅
    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);
        };
    }