2012-03-31 25 views
0

我最近開始研究線程。我想從一開始就開始閱讀MSDN文檔。閱讀關於每個應用程序獨立的ApplicationDomain。但是在這個鏈接ApplicationDomain and Threads中提到了ApplicationDomain和線程

在任何給定時間可以在單個應用程序域中執行多個線程,並且特定線程不限於單個應用程序域。 也就是說,線程可以自由地交叉應用程序域邊界

如果用戶創建的線程,如果它被允許交叉應用領域,則可以將其引用另一ApplicationDomain中的對象或存儲器參考???如果我錯了,請引導我。

+0

你沒有錯。試着問一個真正的問題。 – 2012-03-31 17:54:49

回答

0

應用程序域和線程之間沒有一對一的關係。 雖然線程可能會跨越應用程序域的邊界,但在任何時候,線程都將在單個應用程序域中執行。

見從MSDN以下信息(http://msdn.microsoft.com/en-us/library/2bh4z9hs%28v=vs.90%29.aspx):

代碼在一個應用程序中運行不能直接從另一個應用程序訪問代碼或資源。公共語言運行庫通過阻止不同應用程序域中的對象之間的直接調用來強制執行此隔離。在域之間傳遞的對象可以通過代理進行復制或訪問。如果該對象被複制,則該對象的調用是本地的。也就是說,調用者和被引用的對象都在同一個應用程序域中。如果通過代理訪問對象,則對該對象的調用是遠程的。在這種情況下,調用者和被引用的對象位於不同的應用程序域中。跨域調用使用與兩個進程之間或兩臺機器之間的調用相同的遠程調用基礎結構。

而且下面的文章可能是有用的: http://www.codeproject.com/Articles/26148/Beginners-Guide-to-Threading-in-NET-Part-1-of-n

0

線程運行代碼時,它不能引用應用程序特定的類型或對象。

線程的大部分屬性都是隻讀的,而且您將非常具體的屬性(如CurrentCultre)不能用於傳遞自定義類型。

數據與特定線程關聯的唯一方式是使用ThreadLocal Storage 這當然不會從應用程序域傳遞到另一個,僅在非常特殊的情況下非常有用。

0

答案是肯定的。每個線程都有一個可以指向任意對象的堆棧。線程堆棧上的局部變量是GC根,意味着只要線程處於活動狀態,它們就會保持所有活動。