出于某种原因,我传统上在 C# 中使用 BackgroundWorkers 时遇到了很多麻烦;他们的概念似乎真的难倒我,所以我希望这是一个相当基本的问题,并且可以很容易地纠正......
我有两种使用 .NET 远程处理来回通信的表单。现在,更改 Form1 上的设置会导致 Form2 上的某些内容发生更改,并且效果很好。但是,现在我需要以另一种方式进行相同的工作(更改 Form2 上的某些内容会导致 Form1 更新)并且我不能以相同的方式进行(由于设计限制,我不能让 Form2 发送更改到表格 1)。现在,我正在尝试在 Form1 上使用 BackgroundWorker 来不断调用每个子控件(放置在 Form1 上)上的“Update()”方法。这些控件中的每一个都具有从 Form2 获取其等效设置的当前状态并更新自身的方法(这很有效;已经看到“Update()”方法正在处理 Form1 的初始化)。
这就是我的问题出现的地方。我不确定如何让 BackgroundWorker 在每个表单上不断调用“Update()”,所以在我的“DoWork()”方法中,我有一个“while(true)”循环,并且在其中 BackgroundWorker 调用了“Update() ()' 方法,然后休眠很短的时间,然后重复。
这样做,我得到一个“InvalidOperationException 未被用户代码处理”错误,详细说明“跨线程操作无效:控制'comboBox_BGColor'从创建它的线程以外的线程访问。” 现在,我基本上知道这意味着什么,并且我理解它发生的原因,但是,我不确定该怎么做或如何改变事情以使其按预期工作。有人对此或我使用 BackgroundWorker 的方式有任何提示吗?非常感谢您提供任何信息并花时间阅读本文!