1

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

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

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

我想有更好的方法来解决这个问题,但我现在想不出。你以前遇到过这个问题吗?

非常感谢您的帮助

4

2 回答 2

3

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

软件无法推断出您的意图,除非以非常特定的方式(例如 FxCop,以及 IDE 关于某些事情的警告)。你写的不一定是你想写的。您实际上是在寻求能够弄清楚您要做什么的软件。

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

你必须自己弄清楚。

于 2009-06-11T06:46:08.713 回答
1

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

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

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

于 2009-06-11T06:49:37.880 回答