0

我正在使用一个名为 Laserfiche 的软件。它有一个工作流服务器和一个 SDK,允许您使用自己的自定义活动。创建自定义活动时有一个要求。它必须是序列化的。所以我把属性 [Serializable] 放在所有的类上。问题是当我使用 System.Drawing.Printing.PrintDocument 类时。我得到:

2013 年 2 月 9 日 13:07:12 v9SignoffAuthentication 程序集“System.Drawing,版本=4.0.0.0,文化=中性,PublicKeyToken=b03f5f7f11d50a3a”中的类型“System.Drawing.Printing.PrintDocument”未标记为可序列化。

我谷歌了一下,发现 PrintDocument 不能被序列化。我添加属性

[NonSerialized]
PrintDocument pd;

并且自定义活动运行但不完全。我得到一个例外

 pd.Print();

这是在覆盖方法中

protected override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext)

错误是

System.NullReferenceException:对象引用未设置为对象的实例。在 WFPrintCustomActivity.WFPrintCustomActivity.Execute(ActivityExecutionContext executionContext)||02/09/2013 13:15:38

如果我将对象标记为 NonSerialized,以后不能调用其中一种方法吗?

有任何想法吗?

谢谢

詹弗兰科

4

1 回答 1

0

谢谢Hans Passant,这就是答案。我在里面初始化 pd

  Public WFPrintCustomActivity()
            {
                InitializeComponent();

                settings = new Settings();
                //Logs("STARTED");


                pd = new PrintDocument();
                pd.PrintPage += new PrintPageEventHandler(pd_PrintPage);
            }

我评论了这两行

    pd = new PrintDocument();
    pd.PrintPage += new PrintPageEventHandler(pd_PrintPage);

并在里面初始化 pd

受保护的覆盖ActivityExecutionStatus Execute(ActivityExecutionContext executionContext)

哪个先运行。现在正在工作。

这是我第一次在 stackoverflow 上提问,我想将您的评论标记为答案。我不

于 2013-09-03T08:22:37.743 回答