Поделиться через


Bookmark Класс

Определение

Представляет точку, в которой рабочий процесс или действие может пассивно ожидать возобновления.

public ref class Bookmark : IEquatable<System::Activities::Bookmark ^>
[System.Runtime.Serialization.DataContract]
public class Bookmark : IEquatable<System.Activities.Bookmark>
[<System.Runtime.Serialization.DataContract>]
type Bookmark = class
    interface IEquatable<Bookmark>
Public Class Bookmark
Implements IEquatable(Of Bookmark)
Наследование
Bookmark
Атрибуты
Реализации

Примеры

В следующем примере создается действие ReadLine. При выполнении действие ReadLine создает Bookmark, регистрирует обратный вызов и ждет возобновления чтения с закладки Bookmark. После возобновления чтения с закладки действие ReadLine присваивает данные, переданные с закладкой Bookmark, своему аргументу Result.

public sealed class ReadLine : NativeActivity<string>  
{  
    [RequiredArgument]  
    public  InArgument<string> BookmarkName { get; set; }  

    protected override void Execute(NativeActivityContext context)  
    {  
        // Create a Bookmark and wait for it to be resumed.  
        context.CreateBookmark(BookmarkName.Get(context),   
            new BookmarkCallback(OnResumeBookmark));  
    }  

    // 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; }  
    }  

    public void OnResumeBookmark(NativeActivityContext context, Bookmark bookmark, object obj)  
    {  
        // When the Bookmark is resumed, assign its value to  
        // the Result argument.  
        Result.Set(context, (string)obj);  
    }  
}  

В следующем примере создается рабочий процесс, который использует ReadLine действие для сбора имени пользователя и его отображения в окне консоли. Ведущее приложение выполняет действительную работу по сбору входных данных и передает их в рабочий процесс, возобновляя закладку Bookmark.

Variable<string> name = new Variable<string>  
{  
    Name = "name"  
};  

Activity wf = new Sequence  
{  
    Variables =  
    {  
        name  
    },  
    Activities =  
    {  
        new WriteLine()  
        {  
            Text = "What is your name?"  
        },  
        new ReadLine()  
        {  
            BookmarkName = "UserName",  
            Result = name  
        },  
        new WriteLine()  
        {  
            Text = new InArgument<string>((env) => "Hello, " + name.Get(env))  
        }  
    }  
};  

AutoResetEvent syncEvent = new AutoResetEvent(false);  

// Create the WorkflowApplication using the desired  
// workflow definition.  
WorkflowApplication wfApp = new WorkflowApplication(wf);  

// Handle the desired lifecycle events.  
wfApp.Completed = delegate(WorkflowApplicationCompletedEventArgs e)  
{  
    // Signal the host that the workflow is complete.  
    syncEvent.Set();  
};  

// Start the workflow.  
wfApp.Run();  

// Collect the user's name and resume the bookmark.  
// Bookmark resumption only occurs when the workflow  
// is idle. If a call to ResumeBookmark is made and the workflow  
// is not idle, ResumeBookmark blocks until the workflow becomes  
// idle before resuming the bookmark.  
wfApp.ResumeBookmark("UserName", Console.ReadLine());  

// Wait for Completed to arrive and signal that  
// the workflow is complete.  
syncEvent.WaitOne();  

При выполнении действие ReadLine создает закладку Bookmark с именем UserName и ждет возобновления чтения с этой закладки. Узел собирает необходимые данные и возобновляет чтение с закладки Bookmark. Рабочий процесс возобновляется, отображает имя и затем завершается. Следует заметить, что для возобновления закладки не требуется наличие кода синхронизации. Закладка Bookmark может быть возобновлена только при простое рабочего процесса; если рабочий процесс не простаивает, вызов ResumeBookmark блокируется, пока рабочий процесс не перейдет в состояние простоя.

Комментарии

Когда действие создает объект Bookmark, оно переходит в режим ожидания возобновления Bookmark. Если параллельно с действием, создавшим объект Bookmark, выполняются другие действия, то они будут запланированы для выполнения.

Закладки могут возобновляться ведущим приложением с использованием одного из перегруженных методов ResumeBookmark.

Дополнительные сведения о закладках см. в разделах Использование WorkflowInvoker и WorkflowApplication и Bookmarks.

Конструкторы

Bookmark(String)

Инициализирует новый экземпляр класса Bookmark с использованием указанного имени.

Свойства

Name

Возвращает имя закладки.

Методы

Equals(Bookmark)

Определяет, ссылаются ли текущий объект Bookmark и указанный объект Bookmark на одну точку продолжения в рабочем процессе.

Equals(Object)

Определяет, ссылаются ли текущий объект Bookmark и указанный объект на одну точку продолжения в рабочем процессе.

GetHashCode()

Возвращает уникальный идентификатор для этого экземпляра Bookmark.

GetType()

Возвращает объект Type для текущего экземпляра.

(Унаследовано от Object)
MemberwiseClone()

Создает неполную копию текущего объекта Object.

(Унаследовано от Object)
ToString()

Возвращает имя для именованной закладки или идентификатор для безымянной закладки.

Применяется к