我正在编写一个WinForms应用程序,它有两种模式:控制台或GUI.同一解决方案中的三个项目,一个用于控制台应用程序,一个用于UI表单,第三个用于保存两个接口都将连接的逻辑.控制台应用程序运行绝对顺利.
一个包含用户选择的模型,它有一个IList
T是一个本地对象Step
,它实现了INotifyPropertyChanged
,因此在UI中它被安装到DataGridView上.一切都在运行时很好,对象的初始状态反映在屏幕上.
每个Step
对象是依次执行的任务; 一些属性将改变,反映回IList并传递给DataGridView.
UI版本中的此操作是通过创建BackgroundWorker将事件提升回UI来完成的.这样Step
做并生成一个StepResult
对象,它是一个表示结果的枚举类型(例如Running,NotRun,OK,NotOK,Caveat)和一个表示消息的字符串(因为步骤已经运行但不完全符合预期,即有一个警告).通常,操作将涉及数据库交互,但在调试模式下,我随机生成结果.
如果消息为null,则永远不会有问题,但是如果我生成这样的响应:
StepResult returnvalue = new StepResult(stat, "completed with caveat")
我收到一个错误,说明正在从创建它的线程以外的线程访问DataGridView.(我通过一个自定义处理程序传递它,它应该在需要时处理调用 - 也许它不会?)
然后,如果我生成一个唯一的响应,例如使用随机数r
:
StepResult returnvalue = new StepResult(stat, r.ToString());
操作成功没有问题,数字写得干净利落地写入DataGridView.
我很困惑.我假设它在某种程度上是一个字符串文字问题,但任何人都可以提出更明确的解释吗?