방법: 활동 만들기
활동은 WF에서 동작의 핵심 단위입니다. 활동의 실행 논리는 관리 코드에서 구현하거나 다른 활동을 사용하여 구현할 수 있습니다. 이 항목에서는 두 개의 활동을 만드는 방법을 보여 줍니다. 첫 번째 활동은 코드를 사용하여 실행 논리를 구현하는 간단한 활동입니다. 두 번째 활동의 구현은 다른 활동을 사용하여 정의됩니다. 이러한 활동은 자습서의 다음 단계에서 사용됩니다.
활동 라이브러리 프로젝트 만들기
Visual Studio를 열고 파일 메뉴에서 새로 만들기>프로젝트를 선택합니다.
새 프로젝트 대화 상자의 설치됨 범주에서 Visual C#>워크플로(또는 Visual Basic>워크플로)를 선택합니다.
참고 항목
워크플로 템플릿 범주가 표시되지 않는 경우 Visual Studio의 Windows Workflow Foundation 구성 요소를 설치해야 할 수 있습니다. 새 프로젝트 대화 상자의 왼쪽에서 Visual Studio 설치 관리자 열기 링크를 선택합니다. Visual Studio 설치 관리자에서 개별 구성 요소 탭을 선택합니다. 그런 다음, 개발 활동 범주 아래에서 Windows Workflow Foundation 구성 요소를 선택합니다. 수정을 선택하여 구성 요소를 설치합니다.
활동 라이브러리 프로젝트 템플릿을 선택합니다.
NumberGuessWorkflowActivities
이름 상자에 를 입력한 다음 확인을 클릭합니다.솔루션 탐색기에서 Activity1.xaml을 마우스 오른쪽 단추로 클릭하고 삭제를 선택합니다. 확인 을 클릭하여 확인합니다.
ReadInt 활동 만들기
프로젝트 메뉴에서 새 항목 추가를 선택합니다.
설치됨>공통 항목 노드에서 워크플로를 선택합니다. 워크플로 목록에서 코드 활동을 선택합니다.
ReadInt
이름 상자에 를 입력한 다음 추가를 클릭합니다.기존
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 Exception("BookmarkName cannot be an Empty string.") 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 활동 만들기
Ctrl+Shift+B를 눌러 프로젝트를 빌드합니다. 프로젝트를 빌드하면 이 프로젝트의
ReadInt
활동을 사용하여 이 단계의 사용자 지정 활동을 빌드할 수 있습니다.프로젝트 메뉴에서 새 항목 추가를 선택합니다.
설치됨>공통 항목 노드에서 워크플로를 선택합니다. 워크플로 목록에서 활동을 선택합니다.
Prompt
이름 상자에 를 입력한 다음 추가를 클릭합니다.활동이 아직 표시되어 있지 않은 경우 솔루션 탐색기에서 Prompt.xaml을 두 번 클릭하여 디자이너에 활동을 표시합니다.
활동 디자이너의 왼쪽 아래에 있는 인수를 클릭하여 인수 창을 표시합니다.
인수 만들기를 클릭합니다.
이름 상자에
BookmarkName
를 입력하고 방향 드롭다운 목록에서 안쪽을 선택한 후 인수 형식 드롭다운 목록에서 문자열을 선택하고 Enter 키를 눌러 인수를 저장합니다.인수 만들기를 클릭합니다.
새로 추가된
BookmarkName
인수 아래에 있는 이름 상자에Result
를 입력하고 방향 드롭다운 목록에서 바깥쪽을 선택한 다음, 인수 형식 드롭다운 목록에서 Int32를 선택하고 Enter 키를 누릅니다.인수 만들기를 클릭합니다.
이름 상자에
Text
를 입력하고 방향 드롭다운 목록에서 안쪽을 선택한 후 인수 형식 드롭다운 목록에서 문자열을 선택하고 Enter 키를 눌러 인수를 저장합니다.이 세 가지 인수는 다음 단계에서 WriteLine 활동에 추가되는
ReadInt
및Prompt
활동의 해당 인수에 바인딩됩니다.활동 디자이너의 왼쪽 아래에 있는 인수를 클릭하여 인수 창을 닫습니다.
도구 상자의 흐름 제어 섹션에서 Sequence 활동을 끌어 Prompt 활동 디자이너의 여기에 작업 놓기 레이블에 놓습니다.
팁
도구 상자 창이 표시되지 않으면 보기 메뉴에서 도구 상자를 선택합니다.
도구 상자의 기본 형식 섹션에서 WriteLine 활동을 끌어 Sequence 활동의 여기에 작업 놓기 레이블에 놓습니다.
속성 창에서 C# 식 입력 또는 VB 식 입력 상자에
Text
를 입력하여 WriteLine 활동의 Text 인수를 Prompt 활동의 Text 인수에 바인딩한 다음, Tab 키를 두 번 누릅니다. 그러면 IntelliSense 목록 멤버 창이 사라지고 속성에서 선택 항목을 이동하여 속성 값이 저장됩니다. 활동 자체에서 C# 식 입력 또는 VB 식 입력 상자에Text
를 입력하여 이 속성을 설정할 수도 있습니다.팁
속성 창이 표시되지 않은 경우 보기 메뉴에서 속성 창을 선택합니다.
도구 상자의 NumberGuessWorkflowActivities 섹션에서 ReadInt 활동을 끌어 Sequence 활동의 WriteLine 활동 뒤에 놓습니다.
속성 창에서 BookmarkName 인수 오른쪽의 VB 식 입력 상자에
BookmarkName
을 입력하여 ReadInt 활동의 BookmarkName 인수를 Prompt 활동의 BookmarkName 인수에 바인딩한 다음, Tab 키를 두 번 눌러 IntelliSense 목록 멤버 창을 닫고 속성을 저장합니다.속성 창에서 Result 인수 오른쪽의 VB 식 입력 상자에
Result
를 입력하여 ReadInt 활동의 Result 인수를 Prompt 활동의 Result 인수에 바인딩한 다음, Tab 키를 두 번 누릅니다.Ctrl+Shift+B를 눌러 솔루션을 빌드합니다.
다음 단계
이러한 활동을 사용하여 워크플로를 만드는 방법에 대한 지침은 자습서의 다음 단계인 방법: 워크플로 만들기를 참조하세요.
참고 항목
.NET