2014-04-16 2 views
0

그래서 고객을 수신하는 데 필요한 서버를 연결하고 내 서버 클래스의 생성자에서 내가 가지고 만든에 isBackground = true를 설정 한 후 영업을콘솔 응용 프로그램은 늘 스레드

class Program 
{ 
    static void Main(string[] args) 
    { 

     Server s = new Server(); 
    } 
} 

서버가 ListenMethod 실행하고 while 루프의 개방 원인을 유지해야한다, 아직 프로그램은 생성자를 완료하는 것하고 프로그램을 닫습니다 : 난 그렇게처럼 내 주에 서버의 인스턴스를 생성.

아이디어가 있으십니까?

감사합니다 :)

+0

메인 스레드를 서버로 설정하지 않는 이유는 무엇입니까? 주 스레드가 아무것도하지 않을 때 배경 스레드를 만드는 것은 무의미한 것 같습니다. –

답변

0

당신이 당신의 listner 인스턴스를 인스턴스화하는 것처럼 당신이 Start() 전화, 그래서 코드는 아마도에 listener.Start()에 충돌하기 전에 그것은, 보이지 않는 NullReferenceException 내가 좋아하는 뭔가를 기대

이 :

private void ListenMethod() 
    { 
     listener = new TcpListener(); 
     listener.Start(); 

     while (true) 
     { 
      TcpClient client = listener.AcceptTcpClient(); 
     } 
    } 
+0

안녕하세요, 미안 해요, 질문을 만들 때 이것을 놓쳤습니다. 나는 정말로 초기화한다. 나는 이것을 반영하기 위해 작전을 바꿨다 : – user1795294

+0

고마워. 무시하십시오. –

3

배경 스레드는 목적과 같이 콘솔 응용 프로그램을 유지하지 않습니다. Server 클래스 인스턴스는 아무 것도 사용하지 않기 때문에 범위를 벗어납니다. 이 응용 프로그램의 릴리스 빌드에서는 응용 프로그램에 컴파일되지 않고 최적화되지 않을 수도 있습니다. 다음과 같은 작업을 수행해야합니다.

static void Main(string[] args) 
{ 
    Server server = new Server(); 

    Console.Write("The server is running. Press any key to stop the server."); 
    Console.ReadKey(); 
    server.Stop(); 
} 
+0

다른 응답에서 언급 한 것처럼'listener'가 초기화되지 않았습니다. –

관련 문제