控件是通过除创建控件的线程之外的其他线程访问的。 (无效的线程到线程操作)

时间:2019-03-04 07:40:44

标签: c# multithreading winforms

我已经阅读了一些类似的问题答案,它们涉及Invoke,但我不明白它们如何与我的处境有关。我什至不知道我的设计是否是完成我想要完成的事情的最佳方式,所以我将不胜感激。

我的标题有误。

我所拥有的是一种形式MainForm,它具有一个控件listView1。这具有某种活动的记录(历史)。

现在,此表单将打开另一个表单

NewForm nf= new NewForm(this);
nf.Show();

我将this放入构造函数中,以便新表单可以访问主表单中的函数。 因此,我在新表单中进行了一些活动,然后我想在主表单的列表视图中注册该活动,所以我从新表单进行了

themainform.fillmylistvies(something);

其中mainform是我在构造函数中传递的this

这样做时,我得到了错误,它崩溃了。

我想要做的是在新表单中执行一些活动,然后将该活动记录在主表单的列表视图中。如何做到这一点的最优雅的方式?

编辑: 修改此问题后,我可以意识到,这是异步问题,如注释中(不清楚)指出的那样。但是答案不是在“重复”问题中发布的答案。

答案在以下article的第一部分,但不是最终建议,而是文章中间的建议

  

一种更好的方法是简单地将方法中可以完成实际工作的部分提取到另一种方法中

我这样做了,我将异步部分放在了另一个函数上,然后将await放在了nf的原始方法中。这使错误消失了

1 个答案:

答案 0 :(得分:-2)

使用event更新其他表单是一种很好的做法。您不应通过您的主要表格作为参考。 在here中查看简单示例