Was this page helpful?
Your feedback about this content is important. Let us know what you think.
Additional feedback?
1500 characters remaining
Export (0) Print
Expand All

AsyncCompletedEventArgs.RaiseExceptionIfNecessary Method

Raises a user-supplied exception if an asynchronous operation failed.

Namespace:  System.ComponentModel
Assemblies:   System (in System.dll)
  System.ComponentModel.EventBasedAsync (in System.ComponentModel.EventBasedAsync.dll)

protected void RaiseExceptionIfNecessary()

ExceptionCondition
InvalidOperationException

The Cancelled property is true.

TargetInvocationException

The Error property has been set by the asynchronous operation. The InnerException property holds a reference to Error.

Notes to Inheritors

If you have derived your own class from the AsyncCompletedEventArgs class, your read-only properties should call the RaiseExceptionIfNecessary method before returning the property value. If the component's asynchronous worker code assigns an exception to the Error property or sets the Cancelled property to true, the property will raise an exception if a client tries to read its value. This prevents clients from accessing properties that are potentially not valid due to a failure in the asynchronous operation.

The following code example demonstrates using RaiseExceptionIfNecessary in derived class properties.

    public class CalculatePrimeCompletedEventArgs :
        AsyncCompletedEventArgs
    {
        private int numberToTestValue = 0;
        private int firstDivisorValue = 1;
        private bool isPrimeValue;

        public CalculatePrimeCompletedEventArgs(
            int numberToTest,
            int firstDivisor,
            bool isPrime,
            Exception e,
            bool canceled,
            object state) : base(e, canceled, state)
        {
            this.numberToTestValue = numberToTest;
            this.firstDivisorValue = firstDivisor;
            this.isPrimeValue = isPrime;
        }

        public int NumberToTest
        {
            get
            {
                // Raise an exception if the operation failed or  
                // was canceled.
                RaiseExceptionIfNecessary();

                // If the operation was successful, return the  
                // property value. 
                return numberToTestValue;
            }
        }

        public int FirstDivisor
        {
            get
            {
                // Raise an exception if the operation failed or  
                // was canceled.
                RaiseExceptionIfNecessary();

                // If the operation was successful, return the  
                // property value. 
                return firstDivisorValue;
            }
        }

        public bool IsPrime
        {
            get
            {
                // Raise an exception if the operation failed or  
                // was canceled.
                RaiseExceptionIfNecessary();

                // If the operation was successful, return the  
                // property value. 
                return isPrimeValue;
            }
        }
    }

.NET Framework

Supported in: 4.6, 4.5, 4, 3.5, 3.0, 2.0

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

XNA Framework

Supported in: 3.0, 2.0, 1.0

.NET for Windows Phone apps

Supported in: Windows Phone 8.1, Windows Phone Silverlight 8.1, Windows Phone Silverlight 8

Portable Class Library

Supported in: Portable Class Library
Show:
© 2015 Microsoft