| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 | // Licensed to the .NET Foundation under one or more agreements.// The .NET Foundation licenses this file to you under the MIT License.// See the LICENSE file in the project root for more information. #if HAS_WINFORMSusing System;using System.Threading;using System.Windows.Forms;namespace ReactiveTests.Tests{    internal static class WinFormsTestUtils    {        private static readonly Semaphore s_oneWinForms = new Semaphore(1, 1);        public static IDisposable RunTest(out Label label)        {            s_oneWinForms.WaitOne();            var loaded = new ManualResetEvent(false);            var lbl = default(Label);            var t = new Thread(() =>            {                lbl = new Label();                var frm = new Form { Controls = { lbl }, Width = 0, Height = 0, FormBorderStyle = FormBorderStyle.None, ShowInTaskbar = false };                frm.Load += (_, __) =>                {                    loaded.Set();                };                Application.Run(frm);            });            t.SetApartmentState(ApartmentState.STA);            t.Start();            loaded.WaitOne();            label = lbl;            return new RunWinFormsTest(label, t);        }        private sealed class RunWinFormsTest : IDisposable        {            private readonly Label _lbl;            private readonly Thread _t;            public RunWinFormsTest(Label lbl, Thread t)            {                _lbl = lbl;                _t = t;            }            public void Dispose()            {                _lbl.Invoke(new Action(() =>                {                    Application.Exit();                }));                _t.Join();                s_oneWinForms.Release();            }        }    }}#endif
 |