用线程从子窗体更新父窗体
本文关键字:窗体 更新 线程 | 更新日期: 2023-09-27 18:13:04
我对如何处理这个问题有点困惑。
我有一个父窗体,包含一个DataGridView,和一个子窗体,用于输入一些详细信息的帐户创建。
在帐户创建表单上,当用户创建一个帐户时,它会启动一个线程,该线程将在网站上注册该帐户。每次创建一个帐户时,我想:
1)将其添加到数据库中。我认为这就像创建连接并插入它一样简单。这可以从子窗体中完成吗?即数据库是否可全局访问?
2)更新父窗体上的dataGridView ?
重要的是要注意,使用form. showdialog()调用子表单,我认为这使得更新父表单不可能?我应该使用form.show()吗?
做我想要达到的目标的常规方法是什么?
谢谢
您的数据库访问不限于一个特定的表单-所以,是的,您可以从子表单进行数据库插入。正如DOTNETBEE所说,您可以通过使用委托来更新父表单:
public partial class MainForm : Form
{
public MainForm ()
{
InitializeComponent();
}
private void btnAccount_Click(object sender, EventArgs e)
{
AccountForm objAccountForm = new AccountForm();
objAccountForm.CreateAccount+= new ChangeStatusHandler(objAccountForm_CreateAccount);
objAccountForm.Show();
}
public void objAccountForm_CreateAccount(string accountName)
{
//Add account to grid.
}
}
public delegate void CreateAccountHandler(string accountName);
public partial class AccountForm: Form
{
public event CreateAccountHandler CreateAccount;
public AccountForm()
{
InitializeComponent();
}
private void btnCreate_Click(object sender, EventArgs e)
{
...
//Create your account.
...
if (CreateAccount!= null)
{
CreateAccount(txtAccountName.Text);
}
}
}
如果你想返回多于帐户名称,只需更改CreateAccountHandler签名以返回帐户类或创建一个包含所有属性的EventArgs类。
如果创建帐户可能需要很长时间,并且需要在线程上完成,请使用BackGroundWorker,然后在回调方法中调用CreateAccount委托,而不是在按钮单击事件中调用。