2011-12-14 8 views
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アクティビティの内側に配置されて

screeshot

アクティビティコード

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; } 
    } 
    } 
+0

これは奇妙です。 *値がPartnerSoftwareIntegrationStatus *であるかどうかを明示的にチェックした後、* InvalidCastException *を取得していることを確認してください。 – Joao

+0

*これは前にうまくいきました* - 何の前に?どのようにブックマークを再開していますか? – Joao

+0

私は説明を見つけたと思う:この活動の前のバージョンはOutArgumentを含んでいなかった。古いバージョンを使用して開始され、新しいバージョンで再開されたワークフローを再開するときの問題。 – olorin

答えて

1

あなたは、多くの場合、ときに奇妙な例外のこれらの種類を見ますワークフロー定義を変更し、永続化されたワークフローを再開しようとします。

基本的には、実行中のワークフローを変更することはできません。

関連する問題