private void TryConnect(EndPoint targetAddress)
        {
            var socketArgs = new SocketAsyncEventArgs {
                RemoteEndPoint = targetAddress
            };

            socketArgs.Completed += SocketConnectionComplete;
            nativeSocket.ConnectAsync(socketArgs);
            if (TimedOut != null)
            {
                ThreadExtensions.Start(() =>
                {
                    if (waitForTimeoutHandle.WaitOne((int)(Timeout * 1000)))
                    {
                        return;
                    }
                    if (IsConnected || isDisposed)
                    {
                        return;
                    }
                    TimedOut();
                    Dispose();
                });
            }
        }
        public void Start3()
        {
            const string Param = "name from parameter";
            Thread       t     = ThreadExtensions.Start(UpdateNameViaParameter, Param);

            t.Join();
            Assert.AreEqual(Param, t.Name);
        }
        public void Start1()
        {
            int    num = 1;
            Thread t   = ThreadExtensions.Start(() => IncrementNumber(ref num));

            Assert.AreEqual(1, num);
            t.Join();
            Assert.AreEqual(2, num);
        }
        private void OnLaunchAppClicked(object launchButton, RoutedEventArgs e)
        {
            Panel   controlOwner = GetControlOwner(launchButton);
            AppInfo selectedApp  = GetBoundApp(controlOwner);

            (launchButton as Control).IsEnabled = false;
            Action enableLaunchButtonAgain =
                () => Dispatcher.BeginInvoke(new Action(() => (launchButton as Control).IsEnabled = true));

            ThreadExtensions.Start(() => LaunchApp(selectedApp, enableLaunchButtonAgain));
        }
        public void Start2()
        {
            Thread t = ThreadExtensions.Start("thread name", () => {});

            Assert.AreEqual("thread name", t.Name);
        }