2012-01-24 29 views
0

我試圖創造出單獨掃描指定的IP地址的端口,像這樣的應用程序線程:我需要一些指針有關我的程序

private void ScanPort(IPAddress address, int port) 
{ 
    using (TcpClient client = new TcpClient()) 
    { 
     IAsyncResult result = client.BeginConnect(address, port, null, null); 

     if (result.AsyncWaitHandle.WaitOne(1000, false)) txtDisplay.AppendText("Port: " + nudFrom.Value.ToString() + " is open." + Environment.NewLine); 
     else txtDisplay.AppendText("Port: " + nudFrom.Value.ToString() + " is closed." + Environment.NewLine); 
    } 
} 

現在,有了這個代碼掃描IP需要一定的時間,尤其是如果我有100多個端口掃描。

我雖然研究線程。問題是,我對如何使用線程有點空白,但我確實從MSDN或其他文章中看過一些文章,這些文章展示瞭如何進行基本線程化。

現在,我不知道如何在我的程序中實現線程。我可以創建一個指向我的ScanPort方法的事件處理程序,但是如果我初始化一個或多個線程,它將從端口的開始處開始ping。儘管我有另一個是我應該開始多少個線程。

你明白了嗎?我需要一些關於如何在我的程序中實現線程的基本概念。

+0

我建議你*不*爲此需要線程,您只需使用異步I/O。單線程非常快速地掃描100個端口應該絕對沒有問題。 –

+0

@Greg Hewgill,檢查端口是否打開很快,但關閉時,我必須等待超時才能檢查另一個端口。另外,我不使用異步掃描嗎? – HelpNeeder

+0

是的,您正在使用異步I/O,但是您正在以同步方式使用它。你正在開始一個連接,然後等待發生。我的建議是,你可以同時調用'BeginConnect'來連接多個*不同的*連接。 –

回答

2

在.Net中,單線程程序可以變成多線程的方法很多。如果你有興趣學習.NET中的線程機制,那麼這可能是一個很好的機會,但是正如其他人所暗示的那樣,尋找多線程的使用本身並不是一個有價值的活動。編程非常困難,不會將並行和/或併發性混入混合。

如果你想看看在.net多線程,你需要了解:

System.Threading.Thread

System.Threading.Threadpool

Other methods...

相關問題