我有一个从线程上的轮询循环更新的对象。当数据更改等时,此对象将触发特定事件。
我正在尝试将此对象与Windows窗体结合使用,我在窗体上创建事件处理程序以更新UI。当然,如果我尝试直接在这些处理程序中操作UI,这会导致跨线程操作异常。
我可以通过使用委托,blah blah blah检查InvokeRequired的标准过程来使其工作。但我想将此对象发布为库,我不希望最终用户不必担心这一切。
我希望我的对象能够以某种方式处理这些事件回调与表单的同步,以便最终用户可以无忧无虑地操纵这些处理程序中的UI元素。
有办法吗?
答案 0 :(得分:0)
如果您的对象始终与单个表单相关,那么确实有一个简单的技巧。这里的重要事实是,您可以在以后想要影响表单的线程中实例化对象。
诀窍是在构造函数中的对象中实现一个简单的Control(new Control())。在表单上执行逻辑时,使用此简单控件上的Invoke / BeginInvoke方法将操作分派给正确的调用线程。因此,您可以直接在对象中使用调度逻辑,并且您的对象的其他用户无需关注此事。