我正在尝试从后台工作者那里读取控件的值。
有很多关于如何从后台线程更新控件的示例,但是我找不到如何从中读取控件的示例。
目前我已经创建了一个传递给backgroundworker的结构,但它看起来并不优雅。
STRUCT:
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
答案 0 :(得分: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是Checkbox。
答案 1 :(得分:0)
如果您正在使用Code Behind,则可以将DoWork事件作为Lambda表达式进行,
例如
DoWork+=(_,_)=>{...}
然后在labda表达式中你可以看到外部范围,你可以看到windows控件的名称和buttob。