2010-03-05 56 views
3

這裏是我的問題,內部的非託管的DLL運行功能: 我有我made.I'm調用我的C#代碼的這個DLL的功能之一,使用的PInvoke的非託管的DLL。 在某些情況下,在dll函數中,我希望能夠終止正在運行該函數的線程。我將如何實現該目標?從C#線程

很抱歉,如果這是一個愚蠢的問題,但我是一個總的小白,當談到線程:)

+0

你有一個長期運行的線程,你想從另一個線程殺死?或者你不知道如何清理你已經開始的線程? – 2010-03-05 19:54:15

+0

我正在一個單獨的線程中運行一個潛在的危險函數,以避免破壞我的主線程的堆棧。我不知道如何將消息傳遞給主線程,如果發生問題,所以我正在尋找一種方法殺死已損壞的線程。 – 2010-03-05 20:01:59

回答

3

男人,這聽起來很危險。爲什麼要終止線程?您可能處於您不屬於自己的線索,具體取決於您是如何編組呼叫的。無論哪種方式,似乎最好的選擇是返回一些信息來表明您想要終止線程並讓託管代碼正常處理它。不要試圖在本地代碼中殺死線程。

3

如果我理解正確的話,你的情況是這樣的(使用簡潔的僞代碼)

C# 
== 

Main() 
{ 
    StartNewThread(MyThread); 
    DoStuff(); 
} 

MyThread() 
{ 
    UnmanagedDll.DoSomething(); 
} 

Unmanaged DLL 
============= 
DoSomething() 
{ 
    // Does something here 
} 

這是正確的嗎?

如果是這樣,從UnmanagedDll.DoSomething()返回將導致調用線程終止,如果在調用UnmanagedDll.DoSomething()後沒有語句。所以,只需將控制返回到C#程序即可。

如果這不是您的情況,請提供更多詳細信息。

0

我會回傳一個來自非託管DLL函數的特殊結果,並且(檢測到特殊返回值)在C#中終止線程。終止它在DLL聽起來對我來說是一個非常糟糕的主意。