다음을 통해 공유


관리되는 라이브러리 스레딩 고려 사항

다음 태블릿 PC 스레딩 고려 사항은 관리 라이브러리와 관련이 있습니다.

Thread-Safety

태블릿 PC 플랫폼의 관리형 라이브러리 클래스는 일반적으로 스레드로부터 안전하지 않습니다. 다음 컬렉션은 멤버 수준에서 스레드로부터 안전합니다. 그러나 이러한 컬렉션은 다른 스레드가 컬렉션에서 동시에 작동하는 경우 열거자가 보호된다는 것을 보장하지 않습니다.

STA 및 MTA 애플리케이션

Microsoft Visual Studio .NET에 포함된 마법사를 사용하여 만든 관리되는 애플리케이션은 기본적으로 STA(단일 스레드 아파트)입니다. 애플리케이션의 진입점에서 STA 스레드 또는 MTA(다중 스레드 아파트) 스레드 특성을 설정하여 애플리케이션의 아파트를 변경할 수 있습니다.

애플리케이션이 MTA에서 실행되는 경우 스레드로부터 안전한 코드를 작성해야 합니다. 그러나 이렇게 하면 특정 이벤트 처리 성능 문제를 개선할 수 있습니다.

STA 스레드 및 MTA 스레드 특성에 대한 자세한 내용은 STAThreadAttribute 클래스 및 MTAThreadAttribute 클래스를 참조하세요.

Windows Forms 스레딩 고려 사항

InkPictureInkEdit 컨트롤은 Windows Forms 컨트롤을 확장합니다. Windows Forms 기본적으로 단일 스레드가 있는 네이티브 Win32 창을 기반으로 하므로 Windows Forms 컨트롤은 STA(단일 스레드 아파트) 모델을 사용합니다. 관리 코드에서는 양식의 기본 스레드와 동일한 스레드에서 잉크 컨트롤을 만들어야 합니다.

STA 애플리케이션에서 특정 이벤트는 애플리케이션의 UI(사용자 인터페이스) 스레드가 아닌 스레드에서 발생합니다. 태블릿 PC 이벤트 처리기 내에서 InkPictureInkEdit 컨트롤을 포함하여 Windows Forms 개체 또는 컨트롤을 호출하는 경우 개체 또는 컨트롤의 상속된 Control.Invoke 메서드를 사용합니다. Control 클래스에서 상속된 InvokeRequired 속성을 사용하여 필요한지 확인할 수 있습니다.

예를 들어 Recognition 이벤트에 대한 다음 이벤트 처리기에서 InvokeRequired 속성이 테스트되고 TRUE이면 이벤트 처리기가 사용자 인터페이스 스레드에서 다시 호출됩니다.

void recoContext_Recognition(object sender, 
        RecognizerContextRecognitionEventArgs e)
{
    if (InvokeRequired)
    {
        Invoke( new RecognizerContextRecognitionEventHandler(  
                     recoContext_Recognition ),
                    new object[] { sender, e } );
        return;
    }
     // Use the recognition result here.
}

브라우저에서 UserControl을 awebpagein에 배치하는 경우(웹 컨트롤 참조) STA 애플리케이션으로 실행됩니다. 스마트 클라이언트 애플리케이션( 터치 배포 없음 참조)의 경우 개발자는 ApartmentState를 완전히 제어할 수 있습니다. (기본값은 일반적으로 STA이지만 CLR 버전에 따라 MTA일 수 있습니다.) RealTimeStylus와 관련된 스레 딩 문제는 StylusInput API에 대한 스레딩 고려 사항을 참조하세요.

MTA 애플리케이션에서 Windows Forms 호출하는 방법에 대한 자세한 내용은 다중 스레드 Windows Forms 제어 샘플을 참조하세요.

클립보드 고려 사항

Clipboard 개체는 STA 스레드에서만 작동합니다. STA가 아닌 스레드에서 클립보드에 복사하거나 붙여넣으려고 하면 ThreadStateException이 생성됩니다. 애플리케이션이 MTA인 경우 클립보드의 메서드 호출 및 애플리케이션의 다른 UI 측면 중 일부를 처리하는 STA 스레드를 만듭니다.

이벤트 처리기 내의 예외

태블릿 PC 이벤트 처리기 내에서 예외를 throw할 수 없습니다. 예를 들어 Tablet PC 개체 또는 컬렉션에 대한 이벤트 처리기 대리자에게 등록된 처리기가 세 개 있고 첫 번째 처리기가 예외를 throw하는 경우 다음 시퀀스가 발생합니다.

  1. 첫 번째 처리기가 종료됩니다.
  2. 예외가 손실됩니다.
  3. 나머지 처리기는 호출되지 않습니다.

개체 및 컨트롤 삭제

메모리 누수 방지를 위해 개체 또는 컨트롤이 scope 나가기 전에 이벤트 처리기가 연결된 모든 Tablet PC 개체 또는 컨트롤에서 Dispose 메서드를 명시적으로 호출해야 합니다.

애플리케이션의 성능을 향상시키려면 개체 또는 컨트롤이 더 이상 필요하지 않을 때 Dispose 메서드를 구현하는 태블릿 PC 개체 또는 컨트롤을 수동으로 삭제합니다.

StylusInput API

RealTimeStylus 개체 및 StylusInput API(애플리케이션 프로그래밍 인터페이스)에 대한 스레딩 고려 사항에 대한 자세한 내용은 StylusInput API에 대한 스레딩 고려 사항을 참조하세요.