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() |
Возвращает имя для именованной закладки или идентификатор для безымянной закладки. |