BackgroundWork 没有获取 ComboBox 的值?
BackgroundWork does not get value of ComboBox?
我有一个对象组合框,我确实将这些值插入到我的数据库中,它工作正常。现在我正在尝试创建一个 BackgroundWorker 来插入和控制 Form 的组件,例如按钮和进度以及 ComboBox 本身。问题是添加 BackgroundWorker 后我无法在 ComboBox 中选择值,我不明白这是什么问题。
我该如何解决?
插入方法
/** insere Perfil + Modulo */
private void insertPerfilModulo() {
Perfil perfil = (Perfil)cbxPerfilModulo.SelectedItem;
IList<Modulo> lista = getListaModulo();
foreach(Modulo m in lista){
Permissao permissao = new Permissao();
permissao.perfil = perfil;
permissao.modulo = m;
Boolean exist = dao.isExistPerfilAndModulo(permissao);
if (exist) {
Permissao p = dao.getPermissao(permissao);
dao.update(p);
}else {
dao.insert(permissao);
}
}
}
启动 BackgroundWorker 的按钮
private void btnSalvarPM_Click(object sender, EventArgs e) {
if (!backgroundWorker1.IsBusy) {
progressBar1.Visible = true;
cbxPerfilModulo.Enabled = false;
btnSalvarPM.Enabled = false;
backgroundWorker1.RunWorkerAsync();
}
}
工作
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) {
insertPerfilModulo();
}
异常
The thread '<No Name>' (0x1870) has exited with code 0 (0x0).
'PubControl.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Numerics\v4.0_4.0.0.0__b77a5c561934e089\System.Numerics.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
A first chance exception of type 'System.InvalidOperationException' occurred in System.Windows.Forms.dll
The program '[5396] PubControl.vshost.exe: Program Trace' has exited with code 0 (0x0).
The program '[5396] PubControl.vshost.exe: Managed (v4.0.30319)' has exited with code -1 (0xffffffff).
您正在尝试从后台工作者访问 UI 线程。这是不允许的。
您需要向后台工作人员传递其开展业务所需的所有信息 - 在本例中为从组合框中选择的项目。
在这种情况下,您将得到如下内容:
backgroundWorker1.RunWorkerAsync(cbxPerfilModulo.SelectedItem);
然后在工人中:
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
Perfil perfil = (Perfil)e.Argument;
insertPerfilModulo(perfil);
}
您需要更改方法以接受正在处理的项目的参数。
我有一个对象组合框,我确实将这些值插入到我的数据库中,它工作正常。现在我正在尝试创建一个 BackgroundWorker 来插入和控制 Form 的组件,例如按钮和进度以及 ComboBox 本身。问题是添加 BackgroundWorker 后我无法在 ComboBox 中选择值,我不明白这是什么问题。
我该如何解决?
插入方法
/** insere Perfil + Modulo */
private void insertPerfilModulo() {
Perfil perfil = (Perfil)cbxPerfilModulo.SelectedItem;
IList<Modulo> lista = getListaModulo();
foreach(Modulo m in lista){
Permissao permissao = new Permissao();
permissao.perfil = perfil;
permissao.modulo = m;
Boolean exist = dao.isExistPerfilAndModulo(permissao);
if (exist) {
Permissao p = dao.getPermissao(permissao);
dao.update(p);
}else {
dao.insert(permissao);
}
}
}
启动 BackgroundWorker 的按钮
private void btnSalvarPM_Click(object sender, EventArgs e) {
if (!backgroundWorker1.IsBusy) {
progressBar1.Visible = true;
cbxPerfilModulo.Enabled = false;
btnSalvarPM.Enabled = false;
backgroundWorker1.RunWorkerAsync();
}
}
工作
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) {
insertPerfilModulo();
}
异常
The thread '<No Name>' (0x1870) has exited with code 0 (0x0).
'PubControl.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Numerics\v4.0_4.0.0.0__b77a5c561934e089\System.Numerics.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
A first chance exception of type 'System.InvalidOperationException' occurred in System.Windows.Forms.dll
The program '[5396] PubControl.vshost.exe: Program Trace' has exited with code 0 (0x0).
The program '[5396] PubControl.vshost.exe: Managed (v4.0.30319)' has exited with code -1 (0xffffffff).
您正在尝试从后台工作者访问 UI 线程。这是不允许的。
您需要向后台工作人员传递其开展业务所需的所有信息 - 在本例中为从组合框中选择的项目。
在这种情况下,您将得到如下内容:
backgroundWorker1.RunWorkerAsync(cbxPerfilModulo.SelectedItem);
然后在工人中:
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
Perfil perfil = (Perfil)e.Argument;
insertPerfilModulo(perfil);
}
您需要更改方法以接受正在处理的项目的参数。