RegisterAsyncTask() публичный Метод

public RegisterAsyncTask ( PageAsyncTask task ) : void
task PageAsyncTask
Результат void
        public override void Select(DataSourceSelectArguments arguments, DataSourceViewSelectCallback callback)
        {
            if (_owner.IsAsync)
            {
                System.Web.UI.Page page = ((Control)_owner).Page;
                PageAsyncTask      task = new PageAsyncTask(
                    new BeginEventHandler(OnBeginSelect),
                    new EndEventHandler(OnEndSelect),
                    null,
                    new object[] { arguments, callback });

                page.RegisterAsyncTask(task);
            }
            else
            {
                base.Select(arguments, callback);
            }
        }
Пример #2
0
        internal void HookUpAutomaticHandlers()
        {
            // Do nothing if auto-events are not supported
            if (!SupportAutoEvents)
            {
                return;
            }

            // Get the event list for this Type from our cache, if possible
            object    o = _eventListCache[GetType()];
            EventList eventList;

            // Try to find what handlers are implemented if not tried before
            if (o == null)
            {
                lock (_lockObject) {
                    // Try the cache again, in case another thread took care of it
                    o = (EventList)_eventListCache[GetType()];

                    if (o == null)
                    {
                        eventList = new EventList();

                        GetDelegateInformation(eventList);

                        // Cannot find any known handlers.
                        if (eventList.IsEmpty)
                        {
                            o = _emptyEventSingleton;
                        }
                        else
                        {
                            o = eventList;
                        }

                        // Cache it for next time
                        _eventListCache[GetType()] = o;
                    }
                }
            }

            // Don't do any thing if no known handlers are found.
            if (o == _emptyEventSingleton)
            {
                return;
            }

            eventList = (EventList)o;
            IDictionary <string, SyncEventMethodInfo> syncEvents = eventList.SyncEvents;

            // Hook up synchronous events
            foreach (var entry in syncEvents)
            {
                string key = entry.Key;
                SyncEventMethodInfo info = entry.Value;

                Debug.Assert(_eventObjects[key] != null);

                bool       eventExists = false;
                MethodInfo methodInfo  = info.MethodInfo;

                Delegate eventDelegates = Events[_eventObjects[key]];
                if (eventDelegates != null)
                {
                    foreach (Delegate eventDelegate in eventDelegates.GetInvocationList())
                    {
                        // Ignore if this method is already added to the events list.
                        if (eventDelegate.Method.Equals(methodInfo))
                        {
                            eventExists = true;
                            break;
                        }
                    }
                }

                if (!eventExists)
                {
                    // Create a new Calli delegate proxy
                    IntPtr       functionPtr = methodInfo.MethodHandle.GetFunctionPointer();
                    EventHandler handler     = (new CalliEventHandlerDelegateProxy(this, functionPtr, info.IsArgless)).Handler;

                    // Adds the delegate to events list.
                    Events.AddHandler(_eventObjects[key], handler);
                }
            }

            // Hook up asynchronous events
            IDictionary <string, AsyncEventMethodInfo> asyncEvents = eventList.AsyncEvents;

            AsyncEventMethodInfo preRenderCompleteAsyncEvent;

            if (asyncEvents.TryGetValue(_pagePreRenderCompleteAsyncEventName, out preRenderCompleteAsyncEvent))
            {
                Page page = (Page)this; // this event handler only exists for the Page type
                if (preRenderCompleteAsyncEvent.RequiresCancellationToken)
                {
                    var handler = FastDelegateCreator <Func <CancellationToken, Task> > .BindTo(this, preRenderCompleteAsyncEvent.MethodInfo);

                    page.RegisterAsyncTask(new PageAsyncTask(handler));
                }
                else
                {
                    var handler = FastDelegateCreator <Func <Task> > .BindTo(this, preRenderCompleteAsyncEvent.MethodInfo);

                    page.RegisterAsyncTask(new PageAsyncTask(handler));
                }
            }
        }