2009-06-11 51 views
1

我来找你看看是否有人对如何解决我在迁移到ActiveMQ时遇到的问题有一个想法。 我正在使用ActiveMQ在此项目中发送通知(使用C#),并且在完成实现后,我发现了一些有关线程问题的错误。 ( 我知道该异常的解决方案是使用“如果this.InvokeRequired ....等”,但我的问题是:查找需要InvokeRequired的方法

有没有找到所有需要调用这个方法的任何方式

我当然可以从这样的事实检查一步一步的所有事件触发与通知,但是,除了它会花费我太多的时间,也不会解决我未来的编程错误。

我猜有一个更好的方法来弄清楚这一点,但我现在想不出来。你之前是否遇到过这个问题?

非常感谢您的帮助

回答

3

没有。没有自动化的方法来做到这一点,除非您从一开始就设置了测试驱动的项目。在这种情况下,您可以添加一些条件来测试线程的正确性。

软件无法推断出您的意图,除非是非常特定的方式(例如FxCop和IDE关于某些事情的警告)。你写的不一定是你的意思写的。你正在有效地寻求可以找出你的意思的软件。

要知道是否需要调用的唯一方法是知道任何给定函数操作的上下文。如果它在后台线程上运行,并且您正在调用需要在主线程上运行的代码(例如GUI代码),则需要调用。

你必须自己弄清楚。

+0

好的,我担心没有自动化的方法。我想我只需要通过代码然后:) 谢谢你的帮助!至少我不会寻找不存在的东西! – srodriguez 2009-06-11 06:51:18

1

它不是你调用的某些方法需要调用。这取决于你从哪个线程调用这些方法。

如果您在Winforms应用程序中调用一个方法,则在UI线程以外的线程中,它将需要Invoke。

根据代码,应该很容易分析哪些线程调用了哪些线程,特别是如果您命名后台线程(总是派上用场)。但是,可能没有一种自动的方法来做到这一点 - 只需退一步,看看你的代码。