1 //------------------------------------------------------------------------------
2 // <copyright file="DbDataSourceEnumerator.cs" company="Microsoft">
3 // Copyright (c) Microsoft Corporation. All rights reserved.
5 // <owner current="true" primary="true">[....]</owner>
6 // <owner current="true" primary="false">[....]</owner>
7 //------------------------------------------------------------------------------
9 namespace System.Data.Common {
12 using System.Collections;
13 using System.ComponentModel;
15 using System.Diagnostics;
16 using System.Threading;
18 public abstract class DbDataSourceEnumerator { // V1.2.3300
20 protected DbDataSourceEnumerator() { // V1.2.3300
24 abstract public DataTable GetDataSources(); // V1.2.3300
27 virtual public IAsyncResult BeginGetDataSources(AsyncCallback callback, object asyncStateObject) { // V1.2.3300
28 DbEnumSynchronousAsyncResult asyncResult = new DbEnumSynchronousAsyncResult(callback, asyncStateObject);
30 asyncResult._dataTable = GetElements();
31 asyncResult.SetCompletedSynchronously();
33 catch(DataAdapterException e) {
34 ADP.TraceExceptionForCapture(e);
35 asyncResult.ExceptionObject = e;
37 if (null == asyncResult._dataTable) {
38 throw ADP.DataAdapter("no datatable");
40 if (null != callback) {
41 callback(asyncResult);
46 virtual public DataTable EndGetDataSources(IAsyncResult asyncResult) { // V1.2.3300
47 ADP.CheckArgumentNull(asyncResult, "asyncResult");
48 DbEnumSynchronousAsyncResult ar = (asyncResult as DbEnumSynchronousAsyncResult);
49 if (ar._endXxxCalled) {
50 throw ADP.InvalidOperation("EndGetElements called twice");
52 ar._endXxxCalled = true;
54 if (null != ar.ExceptionObject) {
55 throw ar.ExceptionObject;
60 sealed private class DbEnumSynchronousAsyncResult : DbAsyncResult {
61 internal bool _endXxxCalled;
62 internal DataTable _dataTable;
64 internal DbEnumSynchronousAsyncResult(AsyncCallback callback, Object asyncStateObject) : base(null, callback, asyncStateObject) {