0
奇妙な例外です。OutArgumentでInvalidCastExceptionが発生しました<T> .Set()
System.InvalidCastException: Cannot convert object 'Waiting' to type 'System.Activities.Statements.Pick+PickState'.
at System.Runtime.TypeHelper.Convert[T](Object source)
at System.Activities.Location`1.set_ValueCore(Object value)
at System.Activities.ActivityContext.SetValueCore[T](LocationReference locationReference, T value)
at System.Activities.ActivityContext.SetValue[T](OutArgument`1 argument, T value)
at System.Activities.OutArgument`1.Set(ActivityContext context, T value)
at MyApplication.WaitForStatusChange.OnBookmarkResumed(NativeActivityContext context, Bookmark bookmark, Object value)
at System.Activities.Runtime.BookmarkCallbackWrapper.Invoke(NativeActivityContext context, Bookmark bookmark, Object value)
at System.Activities.Runtime.BookmarkWorkItem.Execute(ActivityExecutor executor, BookmarkManager bookmarkManager)
MyApplication.WaitForStatusChangeは、ワークフローがbookmar引数に列挙whith、この活動のためのブックマークに再開されたときにエラーが発生し、カスタムNativeActivityです。
WaitForStatusChange活動は(他の枝の上に別のNativeActivityで)Pickアクティビティの内側に配置されて
アクティビティコード
public class WaitForPartnerIntegrationStatusChange : NativeActivity
{
public OutArgument<PartnerSoftwareIntegrationStatus> Status { get; set; }
protected override void Execute(NativeActivityContext context)
{
context.CreateBookmark(DocumentStatusChangeWatcher.DocumentPartnerSoftwareIntegrationStatusChangedBookmark, OnBookmarkResumed);
}
private void OnBookmarkResumed(NativeActivityContext context, Bookmark bookmark, object value)
{
if (value is PartnerSoftwareIntegrationStatus)
{
Status.Set(context, (PartnerSoftwareIntegrationStatus)value);
}
}
protected override bool CanInduceIdle
{
get { return true; }
}
}
これは奇妙です。 *値がPartnerSoftwareIntegrationStatus *であるかどうかを明示的にチェックした後、* InvalidCastException *を取得していることを確認してください。 – Joao
*これは前にうまくいきました* - 何の前に?どのようにブックマークを再開していますか? – Joao
私は説明を見つけたと思う:この活動の前のバージョンはOutArgumentを含んでいなかった。古いバージョンを使用して開始され、新しいバージョンで再開されたワークフローを再開するときの問題。 – olorin