Share via


방법: 활동 만들기

활동은 WF에서 동작의 핵심 단위입니다. 활동의 실행 논리는 관리 코드에서 구현하거나 다른 활동을 사용하여 구현할 수 있습니다. 이 항목에서는 두 개의 활동을 만드는 방법을 보여 줍니다. 첫 번째 활동은 코드를 사용하여 실행 논리를 구현하는 간단한 활동입니다. 두 번째 활동의 구현은 다른 활동을 사용하여 정의됩니다. 이러한 활동은 자습서의 다음 단계에서 사용됩니다.

활동 라이브러리 프로젝트 만들기

  1. Visual Studio를 열고 파일 메뉴에서 새로 만들기>프로젝트를 선택합니다.

  2. 새 프로젝트 대화 상자의 설치됨 범주에서 Visual C#>워크플로(또는 Visual Basic>워크플로)를 선택합니다.

    참고 항목

    워크플로 템플릿 범주가 표시되지 않으면 Visual Studio의 Windows Workflow Foundation 구성 요소를 설치해야 할 수 있습니다. 새 프로젝트 대화 상자의 왼쪽에서 Visual Studio 설치 관리자 열기 링크를 선택합니다. Visual Studio 설치 관리자에서 개별 구성 요소 탭을 선택합니다. 그런 다음, 개발 활동 범주 아래에서 Windows Workflow Foundation 구성 요소를 선택합니다. 수정을 선택하여 구성 요소를 설치합니다.

  3. 활동 라이브러리 프로젝트 템플릿을 선택합니다. NumberGuessWorkflowActivities이름 상자에 를 입력한 다음 확인을 클릭합니다.

  4. 솔루션 탐색기에서 Activity1.xaml을 마우스 오른쪽 단추로 클릭하고 삭제를 선택합니다. 확인 을 클릭하여 확인합니다.

ReadInt 활동 만들기

  1. 프로젝트 메뉴에서 새 항목 추가를 선택합니다.

  2. 설치됨>공통 항목 노드에서 워크플로를 선택합니다. 워크플로 목록에서 코드 활동을 선택합니다.

  3. ReadInt이름 상자에 를 입력한 다음 추가를 클릭합니다.

  4. 기존 ReadInt 정의를 다음 정의로 바꿉니다.

    public sealed class ReadInt : NativeActivity<int>
    {
        [RequiredArgument]
        public InArgument<string> BookmarkName { get; set; }
    
        protected override void Execute(NativeActivityContext context)
        {
            string name = BookmarkName.Get(context);
    
            if (string.IsNullOrEmpty(name))
            {
                throw new ArgumentException("BookmarkName cannot be an Empty string.",
                    "context");
            }
    
            context.CreateBookmark(name, new BookmarkCallback(OnReadComplete));
        }
    
        // NativeActivity derived activities that do asynchronous operations by calling
        // one of the CreateBookmark overloads defined on System.Activities.NativeActivityContext
        // must override the CanInduceIdle property and return true.
        protected override bool CanInduceIdle
        {
            get { return true; }
        }
    
        void OnReadComplete(NativeActivityContext context, Bookmark bookmark, object state)
        {
            this.Result.Set(context, Convert.ToInt32(state));
        }
    }
    
    Public NotInheritable Class ReadInt
        Inherits NativeActivity(Of Integer)
    
        <RequiredArgument()>
        Property BookmarkName() As InArgument(Of String)
    
        Protected Overrides Sub Execute(ByVal context As NativeActivityContext)
            Dim name As String
            name = BookmarkName.Get(context)
    
            If name = String.Empty Then
                Throw New ArgumentException("BookmarkName cannot be an Empty string.",
                    "BookmarkName")
            End If
    
            context.CreateBookmark(name, New BookmarkCallback(AddressOf OnReadComplete))
        End Sub
    
        ' NativeActivity derived activities that do asynchronous operations by calling 
        ' one of the CreateBookmark overloads defined on System.Activities.NativeActivityContext 
        ' must override the CanInduceIdle property and return True.
        Protected Overrides ReadOnly Property CanInduceIdle As Boolean
            Get
                Return True
            End Get
        End Property
    
        Sub OnReadComplete(ByVal context As NativeActivityContext, ByVal bookmark As Bookmark, ByVal state As Object)
            Result.Set(context, Convert.ToInt32(state))
        End Sub
    
    End Class
    

    참고 항목

    ReadInt 활동은 코드 활동 템플릿의 기본값인 NativeActivity<TResult> 대신 CodeActivity에서 파생됩니다. 활동이 CodeActivity<TResult> 인수를 통해 노출되는 단일 결과를 제공하는 경우 Result를 사용할 수 있지만 CodeActivity<TResult>는 책갈피 사용을 지원하지 않으므로 NativeActivity<TResult>가 사용됩니다.

Prompt 활동 만들기

  1. Ctrl+Shift+B를 눌러 프로젝트를 빌드합니다. 프로젝트를 빌드하면 이 프로젝트의 ReadInt 활동을 사용하여 이 단계의 사용자 지정 활동을 빌드할 수 있습니다.

  2. 프로젝트 메뉴에서 새 항목 추가를 선택합니다.

  3. 설치됨>공통 항목 노드에서 워크플로를 선택합니다. 워크플로 목록에서 활동을 선택합니다.

  4. Prompt이름 상자에 를 입력한 다음 추가를 클릭합니다.

  5. 활동이 아직 표시되어 있지 않은 경우 솔루션 탐색기에서 Prompt.xaml을 두 번 클릭하여 디자이너에 활동을 표시합니다.

  6. 활동 디자이너의 왼쪽 아래에 있는 인수를 클릭하여 인수 창을 표시합니다.

  7. 인수 만들기를 클릭합니다.

  8. 이름 상자에 BookmarkName를 입력하고 방향 드롭다운 목록에서 안쪽을 선택한 후 인수 형식 드롭다운 목록에서 문자열을 선택하고 Enter 키를 눌러 인수를 저장합니다.

  9. 인수 만들기를 클릭합니다.

  10. 새로 추가된 BookmarkName 인수 아래에 있는 이름 상자에 Result를 입력하고 방향 드롭다운 목록에서 바깥쪽을 선택한 다음, 인수 형식 드롭다운 목록에서 Int32를 선택하고 Enter 키를 누릅니다.

  11. 인수 만들기를 클릭합니다.

  12. 이름 상자에 Text를 입력하고 방향 드롭다운 목록에서 안쪽을 선택한 후 인수 형식 드롭다운 목록에서 문자열을 선택하고 Enter 키를 눌러 인수를 저장합니다.

    이 세 가지 인수는 다음 단계에서 WriteLine 활동에 추가되는 ReadIntPrompt 활동의 해당 인수에 바인딩됩니다.

  13. 활동 디자이너의 왼쪽 아래에 있는 인수를 클릭하여 인수 창을 닫습니다.

  14. 도구 상자흐름 제어 섹션에서 Sequence 활동을 끌어 Prompt 활동 디자이너의 여기에 작업 놓기 레이블에 놓습니다.

    도구 상자 창이 표시되지 않으면 보기 메뉴에서 도구 상자를 선택합니다.

  15. 도구 상자기본 형식 섹션에서 WriteLine 활동을 끌어 Sequence 활동의 여기에 작업 놓기 레이블에 놓습니다.

  16. 속성 창에서 C# 식 입력 또는 VB 식 입력 상자에 Text를 입력하여 WriteLine 활동의 Text 인수를 Prompt 활동의 Text 인수에 바인딩한 다음, Tab 키를 두 번 누릅니다. 그러면 IntelliSense 목록 멤버 창이 사라지고 속성에서 선택 항목을 이동하여 속성 값이 저장됩니다. 활동 자체에서 C# 식 입력 또는 VB 식 입력 상자에 Text를 입력하여 이 속성을 설정할 수도 있습니다.

    속성 창이 표시되지 않은 경우 보기 메뉴에서 속성 창을 선택합니다.

  17. 도구 상자NumberGuessWorkflowActivities 섹션에서 ReadInt 활동을 끌어 Sequence 활동의 WriteLine 활동 뒤에 놓습니다.

  18. 속성 창에서 BookmarkName 인수 오른쪽의 VB 식 입력 상자에 BookmarkName을 입력하여 ReadInt 활동의 BookmarkName 인수를 Prompt 활동의 BookmarkName 인수에 바인딩한 다음, Tab 키를 두 번 눌러 IntelliSense 목록 멤버 창을 닫고 속성을 저장합니다.

  19. 속성 창에서 Result 인수 오른쪽의 VB 식 입력 상자에 Result를 입력하여 ReadInt 활동의 Result 인수를 Prompt 활동의 Result 인수에 바인딩한 다음, Tab 키를 두 번 누릅니다.

  20. Ctrl+Shift+B를 눌러 솔루션을 빌드합니다.

다음 단계

이러한 활동을 사용하여 워크플로를 만드는 방법에 대한 지침은 자습서의 다음 단계인 방법: 워크플로 만들기를 참조하세요.

참고 항목