2009-06-11 67 views
1

我來找你看看是否有人對如何解決我在遷移到ActiveMQ時遇到的問題有一個想法。 我正在使用ActiveMQ在此項目中發送通知(使用C#),並且在完成實現後,我發現了一些有關線程問題的錯誤。 ( 我知道該異常的解決方案是使用「如果this.InvokeRequired ....等」,但我的問題是:查找需要InvokeRequired的方法

有沒有找到所有需要調用這個方法的任何方式

我當然可以從這樣的事實檢查一步一步的所有事件觸發與通知,但是,除了它會花費我太多的時間,也不會解決我未來的編程錯誤。

我猜有一個更好的方法來弄清楚這一點,但我現在想不出來。你之前是否遇到過這個問題?

非常感謝您的幫助

回答

3

沒有。沒有自動化的方法來做到這一點,除非您從一開始就設置了測試驅動的項目。在這種情況下,您可以添加一些條件來測試線程的正確性。

軟件無法推斷出您的意圖,除非是非常特定的方式(例如FxCop和IDE關於某些事情的警告)。你寫的不一定是你的意思寫的。你正在有效地尋求可以找出你的意思的軟件。

要知道是否需要調用的唯一方法是知道任何給定函數操作的上下文。如果它在後臺線程上運行,並且您正在調用需要在主線程上運行的代碼(例如GUI代碼),則需要調用。

你必須自己弄清楚。

+0

好的,我擔心沒有自動化的方法。我想我只需要通過代碼然後:) 謝謝你的幫助!至少我不會尋找不存在的東西! – srodriguez 2009-06-11 06:51:18

1

它不是你調用的某些方法需要調用。這取決於你從哪個線程調用這些方法。

如果您在Winforms應用程序中調用一個方法,則在UI線程以外的線程中,它將需要Invoke。

根據代碼,應該很容易分析哪些線程調用了哪些線程,特別是如果您命名後臺線程(總是派上用場)。但是,可能沒有一種自動的方法來做到這一點 - 只需退一步,看看你的代碼。