查找需要InvokeRequired的方法

时间:2009-06-11 06:32:30

标签: c# multithreading invokerequired

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

有没有办法找到需要这个调用的所有方法?

当然,我可以逐步检查通知触发的所有事件,但是,除了需要花费太多时间的事实之外,它不会解决我未来的编程错误。

我想有更好的方法来弄清楚这一点,但我现在想不到它。你以前遇到过这个问题吗?

非常感谢您的帮助

2 个答案:

答案 0 :(得分:3)

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

软件无法推断出您的意图,除非采用非常具体的方式(例如FxCop,以及IDE对某些事情的警告)。你写的不一定是你写的。你有效地要求软件能够弄明白你的意图。

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

你必须自己解决这个问题。

答案 1 :(得分:1)

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

如果你在Winforms应用程序中调用一个方法,那么在UI线程的其他线程上,它将需要调用。

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