Share via


C# 및 Visual Basic으로 Windows Runtime 구성 요소 만들기

.NET Framework 4.5에서는 관리 코드를 사용하여 Windows 런타임 구성 요소 패키지에 포함되는 자체 Windows 런타임 형식을 만들 수 있습니다.구성 요소를 C++, JavaScript, Visual Basic 또는 C#과 함께 Windows 스토어 앱에서 사용할 수 있습니다.이 문서에서는 구성 요소를 만드는 규칙에 대해 간략히 설명하고 Windows 런타임에 대한 .NET Framework 지원의 몇 가지 측면에 대해서도 알아봅니다.일반적으로 이러한 지원 사항은 .NET Framework 프로그래머가 알 필요가 없도록 디자인되었습니다.하지만 JavaScript 또는 C++에서 사용하도록 구성 요소를 만드는 경우 해당 언어가 Windows 런타임을 지원하는 방식이 어떻게 다른지 알고 있어야 합니다.

참고

Visual Basic 또는 C#과 함께 Windows 스토어 앱에서만 사용하도록 구성 요소를 만들고 해당 구성 요소에 Windows 스토어 컨트롤이 포함되어 있지 않은 경우 Windows 런타임 구성 요소 템플릿 대신 클래스 라이브러리(Windows 스토어 앱) 템플릿을 사용하는 것이 좋습니다.클래스 라이브러리가 단순할수록 제한 사항이 적습니다.

이 문서는 다음 단원으로 구성됩니다.

  • Windows 런타임 구성 요소에서 형식 선언

  • 구성 요소 디버깅

  • 관리 코드에 Windows 런타임 형식 전달

  • Windows 런타임에 관리되는 형식 전달

  • 배열 전달

  • 오버로드된 메서드

  • 비동기 작업

  • 예외 throw

  • 이벤트 선언 및 발생

Windows 런타임 구성 요소에서 형식 선언

내부적으로 구성 요소의 Windows 런타임 형식은 Windows Windows 스토어 앱에서 허용되는 모든 .NET Framework 기능을 사용할 수 있습니다.자세한 내용은 Windows 스토어 앱용 .NET 개요를 참조하십시오.외부적으로 형식의 멤버는 매개 변수 및 반환 값에 대해 Windows 런타임 형식만 노출할 수 있습니다.다음 목록에서는 Windows 런타임 구성 요소에서 노출하는 .NET Framework 형식의 제한 사항에 대해 설명합니다.

  • 구성 요소의 모든 공용 형식과 멤버의 필드, 매개 변수 및 반환 값은 Windows 런타임 형식이어야 합니다.

    이 제한 사항은 사용자가 만든 Windows 런타임 형식과 Windows 런타임이 자체적으로 제공하는 형식을 모두 포함합니다.많은 .NET Framework 형식도 포함됩니다.이러한 형식을 포함하는 것은 관리 코드에서 Windows 런타임을 자연스럽게 사용할 수 있도록 .NET Framework가 제공하는 지원의 일부입니다. 사용자 코드는 기본 Windows 런타임 형식 대신 익숙한 .NET Framework 형식을 사용하는 것으로 나타납니다.예를 들어 Int32 및 Double과 같은 .NET Framework 기본 형식, DateTimeOffset 및 Uri와 같은 특정 기본 형식, 그리고 IEnumerable<T>(Visual Basic에서는 IEnumerable(Of T)) 및 IDictionary<TKey,TValue>와 같이 일반적으로 사용되는 일부 제네릭 인터페이스 형식을 사용할 수 있습니다.(이러한 제네릭 형식의 형식 인수는 Windows 런타임 형식이야 합니다.)이 내용은 이 문서의 뒷부분에 있는 관리 코드에 Windows 런타임 형식 전달 및 Windows 런타임에 관리되는 형식 전달 단원에서 설명합니다.

  • 공용 클래스 및 인터페이스는 메서드, 속성 및 이벤트를 포함할 수 있습니다.이벤트에 대한 대리자를 선언하거나 EventHandler<T> 대리자를 사용할 수 있습니다.공용 클래스 또는 인터페이스에는 다음 사항이 적용됩니다.

    • 제네릭일 수 없습니다.

    • Windows 런타임 인터페이스가 아닌 인터페이스를 구현할 수 없습니다.(하지만 자체 Windows 런타임 인터페이스를 만들고 구현할 수는 있습니다.)

    • System.ExceptionSystem.EventArgs와 같이 Windows 런타임에 속해 있지 않은 형식에서 파생될 수 없습니다.

  • 모든 공용 형식은 어셈블리 이름과 일치하는 루트 네임스페이스를 가져야 하고 어셈블리 이름은 "Windows"로 시작해서는 안 됩니다.

    참고

    기본적으로 Visual Studio 프로젝트는 어셈블리 이름과 일치하는 네임스페이스 이름을 가지고 있습니다.Visual Basic에서는 이 기본 네임스페이스에 대한 Namespace 문이 코드에 표시되지 않습니다.

  • 공용 구조체는 공용 필드 이외의 다른 멤버를 가질 수 없으며, 해당 필드는 값 형식 또는 문자열이어야 합니다.

  • 공용 클래스에는 sealed(Visual Basic에서는 NotInheritable)가 지정되어야 합니다.프로그래밍 모델에 다형성이 필요한 경우 공용 인터페이스를 만들고 다형성이 필요한 클래스에서 해당 인터페이스를 구현하세요.

구성 요소 디버깅

Windows 스토어 앱과 구성 요소가 모두 관리 코드로 빌드된 경우 이 둘을 동시에 디버깅할 수 있습니다.

C++를 사용하는 Windows 스토어 앱의 일부로 구성 요소를 테스트하는 경우 관리 코드와 네이티브 코드를 동시에 디버깅할 수 있습니다.기본값은 네이티브 코드만 디버깅하는 것입니다.

네이티브 C++ 코드와 관리 코드를 모두 디버깅하려면

  1. Visual C++ 프로젝트에 대한 바로 가기 메뉴를 열고 속성을 선택합니다.

  2. 속성 페이지의 구성 속성에서 디버깅을 선택합니다.

  3. 디버거 형식을 선택하고 드롭다운 목록 상자에서 네이티브 전용을 **혼합(관리/네이티브)**으로 변경합니다.확인을 선택합니다.

  4. 네이티브 코드와 관리 코드에 중단점을 설정합니다.

JavaScript를 사용하는 Windows 스토어 앱의 일부로 구성 요소를 테스트하는 경우 기본적으로 솔루션은 JavaScript 디버깅 모드에 있습니다.Visual Studio 2012 및 Visual Studio Express 2012 for Windows 8에서는 JavaScript와 관리 코드를 동시에 디버깅할 수 없습니다.

JavaScript 대신 관리 코드를 디버깅하려면

  1. JavaScript 프로젝트에 대한 바로 가기 메뉴를 열고 속성을 선택합니다.

  2. 속성 페이지의 구성 속성에서 디버깅을 선택합니다.

  3. 디버거 형식을 선택하고 드롭다운 목록 상자에서 스크립트만관리 전용으로 변경합니다.확인을 선택합니다.

  4. 관리 코드에 중단점을 설정하고 일반적인 방식으로 디버깅합니다.

관리 코드에 Windows 런타임 형식 전달

Windows Runtime 구성 요소에서 형식 선언 단원에서 이미 언급했듯이 일부 .NET Framework 형식은 공용 클래스 멤버의 시그니처에 나타날 수 있습니다.이는 관리 코드에서 Windows 런타임을 자연스럽게 사용할 수 있도록 .NET Framework가 제공하는 지원 기능의 일부입니다.여기에는 기본 형식과 일부 클래스 및 인터페이스가 포함됩니다.구성 요소가 JavaScript 또는 C++ 코드에서 사용되는 경우 .NET Framework 형식이 호출자에게 어떻게 표시되는지 알아야 합니다.JavaScript 예제는 연습: C# 또는 Visual Basic으로 간단한 구성 요소를 만들고 JavaScript에서 해당 구성 요소 호출을 참조하십시오.이 단원에서는 일반적으로 사용되는 형식에 대해 알아봅니다.

.NET Framework에서 Int32 구조체와 같은 기본 형식에는 TryParse 메서드 등 유용한 속성 및 메서드가 많이 포함되어 있습니다.반면에 Windows 런타임의 기본 형식과 구조체에는 필드만 포함되어 있습니다.이러한 형식을 관리 코드에 전달하면 해당 형식이 .NET Framework 형식으로 표시되므로, 늘 하던 방식대로 .NET Framework 형식의 속성과 메서드를 사용할 수 있습니다.다음 목록은 IDE에서 자동으로 대체되는 항목을 요약해서 보여 줍니다.

  • Windows 런타임 기본 형식인 Int32, Int64, Single, Double, Boolean, String(변경할 수 없는 유니코드 문자 컬렉션), Enum, UInt32, UInt64 및 Guid의 경우 System 네임스페이스에 있는 동일한 이름의 형식을 사용합니다.

  • UInt8의 경우 System.Byte를 사용합니다.

  • Char16의 경우 System.Char를 사용합니다.

  • IInspectable 인터페이스의 경우 System.Object를 사용합니다.

C# 또는 Visual Basic에서 이러한 형식에 대한 언어 키워드를 제공하는 경우에는 해당 언어 키워드를 대신 사용할 수 있습니다.

기본 형식 이외에도 일반적으로 사용되는 일부 기본 Windows 런타임 형식은 관리 코드에 해당 .NET Framework 형식으로 표시됩니다.예를 들어 JavaScript 코드에서 Windows.Foundation.Uri 클래스를 사용하고, 이 클래스를 C# 또는 Visual Basic 메서드에 전달한다고 가정합니다.관리 코드에서 이에 해당하는 형식은 .NET Framework System.Uri 클래스로, 이 형식을 메서드 매개 변수로 사용해야 합니다.Visual Studio의 IntelliSense는 관리 코드를 작성할 때 Windows 런타임 형식을 숨기고 이에 해당하는 .NET Framework 형식을 표시하므로 언제 Windows 런타임 형식이 .NET Framework 형식으로 표시되는지 알 수 있습니다.(대개 두 형식은 같은 이름을 가지고 있습니다.하지만 관리 코드에서 Windows.Foundation.DateTime 구조체는 System.DateTime이 아닌 System.DateTimeOffset으로 나타난다는 점을 참고하세요.)

일반적으로 사용되는 일부 컬렉션 형식의 경우 Windows 런타임 형식이 구현하는 인터페이스와 해당 .NET Framework 형식이 구현하는 인터페이스 간에 매핑이 일어납니다.위에 언급된 형식과 마찬가지로 .NET Framework 형식을 사용하여 매개 변수 형식을 선언합니다.이렇게 하면 형식 간의 차이를 일부 숨기고 .NET Framework 코드를 더 자연스럽게 작성할 수 있습니다.다음 표에서는 가장 일반적인 제네릭 인터페이스 형식과 기타 일반 클래스 및 인터페이스 매핑을 보여줍니다..NET Framework가 매핑하는 Windows 런타임 형식의 전체 목록은 Windows Runtime 형식의 .NET Framework 매핑을 참조하십시오.

Windows 런타임

.NET Framework

IIterable<T>

IEnumerable<T>

IVector<T>

IList<T>

IVectorView<T>

IReadOnlyList<T>

IMap<K, V>

IDictionary<TKey, TValue>

IMapView<K, V>

IReadOnlyDictionary<TKey, TValue>

IKeyValuePair<K, V>

KeyValuePair<TKey, TValue>

IBindableIterable

IEnumerable

IBindableVector

IList

Windows.UI.Xaml.Data.INotifyPropertyChanged

System.ComponentModel.INotifyPropertyChanged

Windows.UI.Xaml.Data.PropertyChangedEventHandler

System.ComponentModel.PropertyChangedEventHandler

Windows.UI.Xaml.Data.PropertyChangedEventArgs

System.ComponentModel.PropertyChangedEventArgs

    

형식이 둘 이상의 인터페이스를 구현하는 경우 해당 형식이 구현하는 모든 인터페이스를 멤버의 매개 변수 형식 또는 반환 형식으로 사용할 수 있습니다.예를 들어 Dictionary<int, string>(Visual Basic에서는 Dictionary(Of Integer, String))을 IDictionary<int, string>, IReadOnlyDictionary<int, string> 또는 IEnumerable<System.Collections.Generic.KeyValuePair<TKey, TValue>>로 전달하거나 반환할 수 있습니다.

중요

JavaScript는 관리되는 형식이 구현하는 인터페이스 목록에 첫 번째로 표시되는 인터페이스를 사용합니다.+예를 들어 JavaScript 코드에 Dictionary<int, string>을 반환하는 경우 사용자가 반환 형식으로 지정하는 인터페이스에 관계없이 반환 형식은 IDictionary<int, string>으로 나타납니다.즉 첫 번째 인터페이스가 나머지 인터페이스에 나타나는 멤버를 포함하고 있지 않은 경우 해당 멤버는 JavaScript에 표시되지 않습니다.

Windows 런타임에서 IMap<K, V> 및 IMapView<K, V>는 IKeyValuePair를 사용하여 반복됩니다.관리 코드에 전달되면 이들은 IDictionary<TKey, TValue> 및 IReadOnlyDictionary<TKey, TValue>로 표시되므로 당연히 System.Collections.Generic.KeyValuePair<TKey, TValue>를 사용하여 열거해야 합니다.

인터페이스가 관리 코드에 표시되는 방식은 이러한 인터페이스를 구현하는 형식이 표시되는 방식에 영향을 미칩니다.예를 들어 PropertySet 클래스는 관리 코드에서 IDictionary<TKey, TValue>로 나타나는 IMap<K, V>을 구현합니다. PropertySet은 IMap<K, V> 대신 IDictionary<TKey, TValue>를 구현한 것처럼 나타나며, 따라서 관리 코드에서 이 클래스는 .NET Framework 사전의 Add 메서드처럼 동작하는 Add 메서드를 가지고 있는 것으로 보입니다.이 클래스는 Insert 메서드를 가지고 있는 것으로 보이지 않습니다.이 예제는 연습: C# 또는 Visual Basic으로 간단한 구성 요소를 만들고 JavaScript에서 해당 구성 요소 호출에서 찾아볼 수 있습니다.

Windows 런타임에 관리되는 형식 전달

앞의 단원에서 설명했듯이 일부 Windows 런타임 형식은 구성 요소 멤버의 시그니처나 Windows 런타임 멤버의 시그니처(IDE에서 사용하는 경우)에 .NET Framework 형식으로 표시될 수 있습니다..NET Framework 형식을 이러한 멤버에 전달하거나 구성 요소 멤버의 반환 값으로 사용하는 경우 이 형식은 다른 측 코드에 해당 Windows 런타임 형식으로 나타납니다.JavaScript에서 구성 요소를 호출할 때 이러한 점이 어떤 효과를 미치는지 보여 주는 예제는 연습: C# 또는 Visual Basic으로 간단한 구성 요소를 만들고 JavaScript에서 해당 구성 요소 호출의 "구성 요소에서 관리되는 형식 반환" 단원을 참조하십시오.

배열 전달

Windows 런타임에서는 모든 매개 변수가 입력 전용이거나 출력 전용이며 ref 매개 변수(Visual Basic에서는 ByRef)는 없습니다.Windows 런타임 구성 요소에 전달되는 배열의 내용은 입력을 위한 것이거나 출력을 위한 것입니다.즉, 배열을 변경 가능한 것으로 간주해서는 안됩니다.배열을 값(Visual Basic에서는 ByVal)으로 전달하는 경우 이러한 의도를 나타내기 위해 ReadOnlyArrayAttribute 특성 또는 WriteOnlyArrayAttribute 특성을 적용해야 합니다.Windows Runtime 구성 요소에 배열 전달을 참조하십시오.

오버로드된 메서드

Windows 런타임에서 메서드는 오버로드될 수 있습니다.하지만 매개 변수 수가 같은 오버로드를 여러 개 선언하는 경우 이러한 오버로드 중 하나에 Windows.Foundation.Metadata.DefaultOverloadAttribute 특성을 적용해야 합니다.해당 특성이 적용된 오버로드만 JavaScript에서 호출할 수 있습니다.예를 들어 다음 코드에서는 int(Visual Basic에서는 Integer)를 받는 오버르드가 기본 오버로드입니다.

        public string OverloadExample(string s)
        {
            return s;
        }
        [Windows.Foundation.Metadata.DefaultOverload()] 
        public int OverloadExample(int x)
        {
            return x;
        } 
    Public Function OverloadExample(ByVal s As String) As String
        Return s
    End Function
    <Windows.Foundation.Metadata.DefaultOverload> _
    Public Function OverloadExample(ByVal x As Integer) As Integer
        Return x
    End Function

경고

JavaScript에서는 OverloadExample에 어떤 값이든 전달할 수 있으며 JavaScript는 해당 값을 매개 변수에 필요한 형식으로 강제 변환합니다."forty-two", "42" 또는 42.3으로 OverloadExample을 호출할 수 있지만 이 값들은 모두 기본 오버로드로 전달됩니다.앞 예제의 기본 오버로드는 각각 0, 42 및 42를 반환합니다.

생성자에는 DefaultOverloadAttribute 특성을 적용할 수 없습니다.클래스의 모든 생성자는 매개 변수의 수가 달라야 합니다.

비동기 작업

구성 요소에서 비동기 메서드를 구현하려면 메서드 이름의 끝에 "Async"를 추가하고 비동기 작업을 나타내는 Windows 런타임 인터페이스인 IAsyncAction, IAsyncActionWithProgress<TProgress>, IAsyncOperation<TResult> 또는 IAsyncOperationWithProgress<TResult, TProgress> 중 하나를 반환합니다.

.NET Framework 작업(Task 클래스 및 제네릭 Task<TResult> 클래스)을 사용하여 비동기 메서드를 구현할 수 있습니다.C# 또는 Visual Basic으로 작성된 비동기 메서드에서 반환된 작업이나 Task.Run 메서드에서 반환된 작업 등 진행 중인 작업을 나타내는 작업을 반환해야 합니다.생성자를 사용하여 작업을 만드는 경우 작업을 반환하기 전에 해당 Task.Start 메서드를 호출해야 합니다.

await(Visual Basic에서는 Await)를 사용하는 메서드에는 async 키워드가 필요합니다(Visual Basic에서는 Async).Windows 런타임 구성 요소에서 이러한 메서드를 노출하는 경우 Run 메서드에 전달하는 대리자에 async 키워드를 적용합니다.

취소 또는 진행률 보고를 지원하지 않는 비동기 작업의 경우 WindowsRuntimeSystemExtensions.AsAsyncAction 또는 AsAsyncOperation<TResult> 확장 메서드를 사용하여 적절한 인터페이스에 작업을 래핑할 수 있습니다.예를 들어 다음 코드는 작업을 시작하는 Task.Run 메서드를 사용하여 비동기 메서드를 구현합니다.AsAsyncOperation<TResult> 확장 메서드는 작업을 Windows 런타임 비동기 작업으로 반환합니다.

        public static IAsyncOperation<IList<string>> DownloadAsStringsAsync(string id)
        {
            return Task.Run<IList<string>>(async () =>
            {
                var data = await DownloadDataAsync(id);
                return ExtractStrings(data);
            }).AsAsyncOperation();
        }


    Public Shared Function DownloadAsStringsAsync(ByVal id As String) _
         As IAsyncOperation(Of IList(Of String))

        Return Task.Run(Of IList(Of String))(
            Async Function()
                Dim data = Await DownloadDataAsync(id)
                Return ExtractStrings(data)
            End Function).AsAsyncOperation()
    End Function


다음 JavaScript 코드는 WinJS.Promise 개체를 사용하여 메서드를 호출하는 방법을 보여 줍니다.then 메서드에 전달된 함수는 비동기 호출이 완료되면 실행됩니다.stringList 매개 변수에는 DownloadAsStringAsync 메서드에서 반환된 문자열 목록이 들어 있으며, 함수는 필요한 모든 처리를 수행합니다.

function asyncExample(id) {

    var result = SampleComponent.Example.downloadAsStringAsync(id).then(
        function (stringList) {
            // Place code that uses the returned list of strings here.
        });
}

취소 또는 진행률 보고를 지원하는 비동기 작업의 경우 AsyncInfo 클래스를 사용하여 시작된 작업을 생성하고, 작업의 취소 및 진행률 보고 기능을 해당 Windows 런타임 인터페이스의 취소 및 진행률 보고 기능에 연결합니다.취소 및 진행률 보고를 모두 지원하는 예제는 연습: C# 또는 Visual Basic으로 간단한 구성 요소를 만들고 JavaScript에서 해당 구성 요소 호출을 참조하십시오.

비동기 메서드가 취소 및 진행률 보고를 지원하지 않는 경우에도 AsyncInfo 클래스의 메서드를 사용할 수 있습니다.Visual Basic 람다 함수 또는 C# 무명 메서드를 사용하는 경우 IProgress<T> 인터페이스 및 토큰에 매개 변수를 제공하지 마십시오.C# 람다 함수를 사용하는 경우에는 토큰 매개 변수를 제공하지만 무시하세요.AsAsyncOperation<TResult> 메서드를 사용한 앞 예제는 AsyncInfo.Run<TResult>(Func<CancellationToken, Task<TResult>>) 메서드 오버로드를 대신 사용하는 경우 다음과 같이 보입니다.

        public static IAsyncOperation<IList<string>> DownloadAsStringsAsync(string id)
        {
            return AsyncInfo.Run<IList<string>>(async (token) =>
            {
                var data = await DownloadDataAsync(id);
                return ExtractStrings(data);
            });
        }
    Public Function OverloadExample(ByVal s As String) As String
        Return s
    End Function
    <Windows.Foundation.Metadata.DefaultOverload> _
    Public Function OverloadExample(ByVal x As Integer) As Integer
        Return x
    End Function

취소 또는 진행률 보고를 선택적으로 지원하는 비동기 메서드를 만드는 경우 취소 토큰 또는 IProgress<T> 인터페이스에 대한 매개 변수가 없는 오버로드를 추가하세요.

예외 throw

Windows 스토어 앱용 .NET - 지원되는 API에 포함된 모든 예외 형식을 throw할 수 있습니다.공용 예외 형식을 Windows 런타임 구성 요소에서 선언할 수 없지만 공용이 아닌 형식을 선언하고 throw할 수 있습니다.

구성 요소가 예외를 처리하지 않는 경우 구성 요소를 호출한 코드에서 이에 해당하는 예외가 발생합니다.예외가 호출자에게 표시되는 방식은 호출하는 언어가 Windows 런타임을 지원하는 방식에 따라 다릅니다.

  • JavaScript에서 예외는 예외 메시지가 스택 추적으로 대체되는 개체로 나타납니다.Visual Studio에서 응용 프로그램을 디버깅할 때 디버거 예외 대화 상자에서 "WinRT 정보"로 식별되어 표시된 원래 메시지 텍스트를 볼 수 있습니다.JavaScript 코드에서는 원래 메시지 텍스트에 액세스할 수 없습니다.

    참고

    현재, 스택 추적에는 관리되는 예외 형식이 포함되어 있지만 예외 형식을 식별하기 위해 추적을 구문 분석하지 않는 것이 좋습니다.대신 이 단원의 뒷부분에서 설명하는 HRESULT 값을 사용하십시오.

  • C++에서 예외는 플랫폼 예외로 나타납니다.관리되는 예외의 HResult 속성이 특정 플랫폼 예외의 HRESULT에 매핑될 수 있으면 특정 예외가 사용되고, 그렇지 않으면 Platform::COMException 예외가 throw됩니다.관리되는 예외의 메시지 텍스트는 C++ 코드에서 사용할 수 없습니다.특정 플랫폼 예외가 throw되었으면 해당 예외 형식의 기본 메시지 텍스트가 나타나고, 그렇지 않으면 메시지 텍스트가 나타나지 않습니다.예외(C++/CX)을 참조하십시오.

  • C# 또는 Visual Basic에서는 예외가 일반적인 관리되는 예외입니다.

구성 요소에서 예외를 throw하는 경우 해당 구성 요소와 관련된 HResult 속성 값을 가진 공용이 아닌 예외 형식을 throw하여 JavaScript 또는 C++ 호출자가 예외를 쉽게 처리하게 할 수 있습니다.HRESULT는 예외 개체의 number 속성을 통해 JavaScript 호출자가 사용할 수 있고 COMException::HResult 속성을 통해 C++ 호출자가 사용할 수 있습니다.

참고

HRESULT에는 음수 값을 사용하십시오.양수 값은 성공으로 해석되고 JavaScript 또는 C++ 호출자에 예외가 throw되지 않습니다.

이벤트 선언 및 발생

이벤트 데이터를 보유하는 형식을 선언하는 경우 EventArgs는 Windows 런타임 형식이 아니므로 EventArgs 대신 Object에서 형식이 파생되어야 합니다.이벤트의 형식으로 EventHandler<TEventArgs>을 사용하고 제네릭 형식 인수로 이벤트 인수 형식을 사용하세요..NET Framework 응용 프로그램에서 사용하는 방식으로 이벤트를 발생시킵니다.

Windows 런타임 구성 요소를 JavaScript 또는 C++에서 사용하는 경우 이벤트는 해당 언어에서 예상하는 Windows 런타임 이벤트 패턴을 따릅니다.C# 또는 Visual Basic에서 구성 요소를 사용하는 경우 이벤트는 일반적인 .NET Framework 이벤트로 나타납니다.예제를 보려면 연습: C# 또는 Visual Basic으로 간단한 구성 요소를 만들고 JavaScript에서 해당 구성 요소 호출을 참조하십시오.

사용자 지정 이벤트 접근자를 구현하는 경우(Visual Basic에서는 Custom 키워드를 사용하여 이벤트 선언) 구현에서 Windows 런타임 이벤트 패턴을 따라야 합니다.Windows 런타임 구성 요소의 사용자 지정 이벤트 및 이벤트 접근자를 참조하십시오.C# 또는 Visual Basic 코드에서 이벤트를 처리하는 경우 이벤트가 일반적인 .NET Framework 이벤트로 보인다는 것을 참고하세요.

참고 항목

개념

Windows 스토어 앱용 .NET 개요

Windows 스토어 앱용 .NET - 지원되는 API

연습: C# 또는 Visual Basic으로 간단한 구성 요소를 만들고 JavaScript에서 해당 구성 요소 호출

Windows Runtime 구성 요소 만들기

Windows 런타임 구성 요소의 사용자 지정 이벤트 및 이벤트 접근자

Windows Runtime 구성 요소에 배열 전달

Windows Runtime 형식의 .NET Framework 매핑

Windows Runtime 구성 요소 오류 조건 진단