我一定误解了一些东西,因为我不知道为什么这不起作用。
我有一个名为loadfile的词典。
public Dictionary<string, string> loadfile;
此词典中填充了从文件中读取的条目。
例如,如果我执行以下操作?
MessageBox.Show(loadfile["someentry"]);
消息框显示字符串中的值'someentry'。
然而..如果我做同样的事情,但不是在消息框中显示它,我想在一个文本框中显示它:
textBox1.Text = loadfile["someentry"];
它抛出异常(我在try-catch中运行它)。
我在这里错过了什么?
答案 0 :(得分:2)
System.InvalidOperationException - 可以因为我在后台工作程序中运行吗?
是的,这可能是问题所在。问题不是从字典中获取值,而是设置用户界面元素的.Text
属性。
必须在UI线程上完成所有UI访问。您需要将回调编组回UI
线程通过Control.Invoke
(Windows窗体)或Dispatcher.Invoke
(WPF)。
例如,如果这是Windows窗体,您可以执行以下操作:
var entry = loadfile["someentry"];
textBox1.BeginInvoke(new Action(() => textBox1.Text = entry));
答案 1 :(得分:0)
这样做
textBox1.Invoke(new Action(() => textBox1.Text = loadfile["someentry"]));
如果您使用的是BackgroundWorker
,则可能只想订阅CompletedEventArgs
和DoWork
。
在DoWork
中您设置Backgroundworker
并在CompletedEventArgs
中更新TextBox
。 CompletedEventArgs将在Dispatcher
线程
BackgroundWorker的示例用法
private void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
textBox1.Text = e.Result.ToString();
}
private void bw_DoWork(object sender, DoWorkEventArgs e)
{
//Load your dictionary or something and set the result here like
//e.Result = SomeAction
}