コード例 #1
0
        private static void WeakSample()
        {
            var context = new WeakContext();

            var weakDelegate = ((Action)context.Count).GetWeak();
            var result       = weakDelegate.TryInvokeAction();

            context = null;

            var result2 = weakDelegate.TryInvokeAction();

            Task.Delay(100).ContinueWith(async _ =>
            {
                while (true)
                {
                    var result3 = weakDelegate.TryInvokeAction();
                    if (!result3)
                    {
                        Console.WriteLine("Reference was lost");
                        break;
                    }
                    await Task.Delay(100).ConfigureAwait(false);
                    GC.Collect();
                }
            });
        }
コード例 #2
0
        /// <summary>
        ///     The add context.
        /// </summary>
        /// <param name="name">
        ///     The name.
        /// </param>
        /// <param name="context">
        ///     The context.
        /// </param>
        /// <param name="owner">
        ///     The owner.
        /// </param>
        private static void AddContext(string name, ObjectContext context, object owner)
        {
            Contract.Requires<ArgumentNullException>(owner != null, "owner");

            _aspectContexts[name] = new WeakContext(owner) {Context = context};
        }