## IDocumentSavingCallback.Notify method

This is called to notify of document saving progress.

```csharp
public void Notify(DocumentSavingArgs args)
```

| Parameter | Type | Description |
| --- | --- | --- |
| args | DocumentSavingArgs | An argument of the event. |

## Remarks

The primary uses for this interface is to allow application code to obtain progress status and abort saving process.

An exception should be threw from the progress callback for abortion and it should be caught in the consumer code.

## Examples

Shows how to manage a document while saving to html.

```csharp
Document doc = new Document(MyDir + "Big document.docx");

// Following formats are supported: Html, Mhtml, Epub.
HtmlSaveOptions saveOptions = new HtmlSaveOptions(saveFormat)
{
    ProgressCallback = new SavingProgressCallback()
};

OperationCanceledException exception = Assert.Throws<OperationCanceledException>(() =>
    doc.Save(ArtifactsDir + $"HtmlSaveOptions.ProgressCallback.{ext}", saveOptions));

Assert.That(exception != null ? exception.Message.Contains("EstimatedProgress") : (bool?)null, Is.True);
```

Shows how to manage a document while saving to html (SavingProgressCallback).

```csharp
/// <summary>
/// Saving progress callback. Cancel a document saving after the "MaxDuration" seconds.
/// </summary>
public class SavingProgressCallback : IDocumentSavingCallback
{
    /// <summary>
    /// Ctr.
    /// </summary>
    public SavingProgressCallback()
    {
        mSavingStartedAt = DateTime.Now;
    }

    /// <summary>
    /// Callback method which called during document saving.
    /// </summary>
    /// <param name="args">Saving arguments.</param>
    public void Notify(DocumentSavingArgs args)
    {
        DateTime canceledAt = DateTime.Now;
        double ellapsedSeconds = (canceledAt - mSavingStartedAt).TotalSeconds;
        if (ellapsedSeconds > MaxDuration)
            throw new OperationCanceledException($"EstimatedProgress = {args.EstimatedProgress}; CanceledAt = {canceledAt}");
    }

    /// <summary>
    /// Date and time when document saving is started.
    /// </summary>
    private readonly DateTime mSavingStartedAt;

    /// <summary>
    /// Maximum allowed duration in sec.
    /// </summary>
    private const double MaxDuration = 0.1d;
}
```

Shows how to manage a document while saving to docx.

```csharp
Document doc = new Document(MyDir + "Big document.docx");

// Following formats are supported: Docx, FlatOpc, Docm, Dotm, Dotx.
OoxmlSaveOptions saveOptions = new OoxmlSaveOptions(saveFormat)
{
    ProgressCallback = new SavingProgressCallback()
};

OperationCanceledException exception = Assert.Throws<OperationCanceledException>(() =>
    doc.Save(ArtifactsDir + $"OoxmlSaveOptions.ProgressCallback.{ext}", saveOptions));
Assert.That(exception != null ? exception.Message.Contains("EstimatedProgress") : (bool?)null, Is.True);
```

Shows how to manage a document while saving to docx (SavingProgressCallback).

```csharp
/// <summary>
/// Saving progress callback. Cancel a document saving after the "MaxDuration" seconds.
/// </summary>
public class SavingProgressCallback : IDocumentSavingCallback
{
    /// <summary>
    /// Ctr.
    /// </summary>
    public SavingProgressCallback()
    {
        mSavingStartedAt = DateTime.Now;
    }

    /// <summary>
    /// Callback method which called during document saving.
    /// </summary>
    /// <param name="args">Saving arguments.</param>
    public void Notify(DocumentSavingArgs args)
    {
        DateTime canceledAt = DateTime.Now;
        double ellapsedSeconds = (canceledAt - mSavingStartedAt).TotalSeconds;
        if (ellapsedSeconds > MaxDuration)
            throw new OperationCanceledException($"EstimatedProgress = {args.EstimatedProgress}; CanceledAt = {canceledAt}");
    }

    /// <summary>
    /// Date and time when document saving is started.
    /// </summary>
    private readonly DateTime mSavingStartedAt;

    /// <summary>
    /// Maximum allowed duration in sec.
    /// </summary>
    private const double MaxDuration = 0.01d;
}
```

Shows how to manage a document while saving to xamlflow.

```csharp
Document doc = new Document(MyDir + "Big document.docx");

// Following formats are supported: XamlFlow, XamlFlowPack.
XamlFlowSaveOptions saveOptions = new XamlFlowSaveOptions(saveFormat)
{
    ProgressCallback = new SavingProgressCallback()
};

OperationCanceledException exception = Assert.Throws<OperationCanceledException>(() =>
    doc.Save(ArtifactsDir + $"XamlFlowSaveOptions.ProgressCallback.{ext}", saveOptions));
Assert.That(exception != null ? exception.Message.Contains("EstimatedProgress") : (bool?)null, Is.True);
```

Shows how to manage a document while saving to xamlflow (SavingProgressCallback).

```csharp
/// <summary>
/// Saving progress callback. Cancel a document saving after the "MaxDuration" seconds.
/// </summary>
public class SavingProgressCallback : IDocumentSavingCallback
{
    /// <summary>
    /// Ctr.
    /// </summary>
    public SavingProgressCallback()
    {
        mSavingStartedAt = DateTime.Now;
    }

    /// <summary>
    /// Callback method which called during document saving.
    /// </summary>
    /// <param name="args">Saving arguments.</param>
    public void Notify(DocumentSavingArgs args)
    {
        DateTime canceledAt = DateTime.Now;
        double ellapsedSeconds = (canceledAt - mSavingStartedAt).TotalSeconds;
        if (ellapsedSeconds > MaxDuration)
            throw new OperationCanceledException($"EstimatedProgress = {args.EstimatedProgress}; CanceledAt = {canceledAt}");
    }

    /// <summary>
    /// Date and time when document saving is started.
    /// </summary>
    private readonly DateTime mSavingStartedAt;

    /// <summary>
    /// Maximum allowed duration in sec.
    /// </summary>
    private const double MaxDuration = 0.01d;
}
```

### See Also

* class [DocumentSavingArgs](../../documentsavingargs/)
* interface [IDocumentSavingCallback](../)
* namespace [Aspose.Words.Saving](../../../aspose.words.saving/)
* assembly [Aspose.Words](../../../)
