2016-08-27 4 views
-3

Telescope이라는 대형 공용 클래스가 있습니다. 나는 새 양식 (form1.cs)을 만들었고 클래스에있는 공개 무효화 중 일부를 호출하려고합니다.C# 형식의 기존 클래스 호출

는 내가 모든 방법을 볼 수있는 클래스를 그 후

Telescope controls = new Telescope(); controls.CommandString("Gs#",true);

를 초기화하는 형태로이 같은 일을하지만, 클래스가 이미 초기화로는 실행에 실패하고있다 기존 직렬 포트 연결 진행 중이므로 직렬 포트 연결이 없다고보고합니다.

어떤 도움이 필요합니까? 새 양식의 기존 방법을 사용하려면 어떻게해야합니까? 나는 그것이 작동 (망원경 클래스 임) Driver.cs에서이 CommandString를 사용하는 경우

망원경 클래스는

public string CommandString(string command, bool raw) 
{ 
    CheckConnected("CommandString"); 
    serialPort.ClearBuffers(); 
    serialPort.Transmit(command); 
    return serialPort.ReceiveTerminated("#"); 

} 

Driver.cs

입니다. 내가 예외를 얻을 Form1.cs를

에서 작동하지 않습니다 당신은 IoC 컨테이너의 일종을 사용하는 것입니다 귀하의 클래스와 인터페이스 베어 최소한의 방법을 포함하는 인터페이스를 구현하는 것이

이상적으로
************** Exception Text ************** 
ASCOM.NotConnectedException: CommandString 
+0

이것은 작동합니다. 이제 망원경 클래스에서 정확히 무슨 일이 일어나고 왜 작동하지 않는지는 코드를 공개하지 않으면 알 수 있습니다. –

+0

@ IvanIcin 그는 시리얼 포트에 연결을 시도하고 있습니다 ... 이것은 C#의 범위 밖에 있습니다. 그러나 통신 포트는 한 번에 하나의 연결 만 유지할 수 있습니다. –

+0

잠깐, 직렬 포트에 다시 연결하고 싶지 않습니다. 난 그냥 기존의 연결을 활용하고 싶습니다. 게시물을 수정하겠습니다. – evans

답변

0

직렬 연결. 그런 다음 IoC 컨테이너는 인스턴스의 수명을 싱글 톤으로 관리하고 인터페이스를 확인하는 모든 요청에 ​​대해 기존 인스턴스를 다시 전달합니다.

단일 인스턴스 만 직렬 포트에 액세스 할 수 있기 때문에 이러한 메서드를 정적 클래스로 이동할 수 있습니다 ...하지만 정적 메서드 공유를 시작할 때 예기치 않은 버그가 발생할 수 있으므로주의해야합니다 . 코드 구성 방법에 따라 직렬 연결 만 정적으로 설정하는 것이 좋습니다.

이이 클래스에서 구현 될 수있는 방법의 한 예 : 앱 어딘가에 망원경 클래스의 첫 번째 (만) 인스턴스에 대한 참조를 유지하고 그 참조하여 액세스해야

private Lazy<SerialConnection> _serialConnection =new Lazy<SerialConnection>(StaticClass.GetStaticSerialConnection); 
public SerialConnection MySerialConnection 
{ 
    get { return _serialConnection.Value; } 
} 
+0

자세한 내용은 게시물을 수정했습니다. 나는 그것이 애매하고 솔루션이 더 간단하다고 생각한다. – evans

+0

@evans 나는 나의 대답이 질문을 올바르게 다루고 있다고 믿는다. 문제는 하나의 통신 포트에서 두 개의 직렬 연결을 열 수 없다는 것입니다. 예를 들어, 퍼티를 열어 포트에 연결하려고 시도하면 퍼티도 실패합니다. 어떻게 든 통신 연결을 공유해야합니다. –

0

. 참조는 일부 정적 클래스에 보관 될 수 있습니다.이 클래스에서 초기화 할 수 있으며 항상 해당 정적 클래스를 사용하여 참조 할 수 있습니다.

+0

정적과 같은 인스턴스를 다루는 것과 정적처럼 주위를 전달하는 것의 차이점은 무엇입니까? –