void worker_DoWork(object sender, DoWorkEventArgs e)
        {
            if (String.IsNullOrWhiteSpace(InstanceId) || String.IsNullOrWhiteSpace(PrivateKey))
            {
                e.Result = null;
                return;
            }

            //ec2 client
            var ec2 = AWSClientFactory.CreateAmazonEC2Client(AWSAccessKey,
                                                             AWSSecretKey,
                                                             new AmazonEC2Config().WithServiceURL(RegionHelper.EC2EndpointForRegion(EC2Region))
                                                             );

            try
            {
                var getPwRequest = ec2.GetPasswordData(
                    new Amazon.EC2.Model.GetPasswordDataRequest().
                    WithInstanceId(InstanceId)
                    );

                var result = getPwRequest.GetPasswordDataResult;
                if (string.IsNullOrWhiteSpace(result.PasswordData.Data))
                {
                    throw new Exception("No password data was returned.");
                }

                var decryptedPassword = result.GetDecryptedPassword(PrivateKey.Trim());
                e.Result = decryptedPassword;
            }
            catch (Exception ex)
            {
                e.Result = ex;
                return;
            }
        }
        void worker_DoWork(object sender, DoWorkEventArgs e)
        {
            //validate args
            if (String.IsNullOrEmpty(AWSAccessKey) || String.IsNullOrEmpty(AWSSecretKey))
            {
                e.Result = null;
                return;
            }

            //ec2 client
            var ec2 = AWSClientFactory.CreateAmazonEC2Client(AWSAccessKey,
                                                             AWSSecretKey,
                                                             new AmazonEC2Config().WithServiceURL(RegionHelper.EC2EndpointForRegion(EC2Region))
                                                             );

            //get instances
            IEnumerable <RunningInstance> instances;

            try
            {
                var response = ec2.DescribeInstances(new Amazon.EC2.Model.DescribeInstancesRequest());

                //handle no data
                if (!response.IsSetDescribeInstancesResult())
                {
                    e.Result = null;
                    return;
                }

                instances = response.DescribeInstancesResult.Reservation.SelectMany(res => res.RunningInstance);
            }
            catch (Exception ex)
            {
                //handle error retreiving data
                e.Result = null;
                //TODO: log exception

                return;
            }

            //parse data
            e.Result = instances.Select(instance => new Connection
            {
                Host             = instance.PublicDnsName,
                Id               = instance.InstanceId,
                Name             = GetInstanceFriendlyName(instance),
                Protocol         = String.Equals(instance.Platform, "windows", StringComparison.InvariantCultureIgnoreCase) ? ConnectionProtocol.RDP : ConnectionProtocol.SSH,
                HexIp            = instance.InstanceState.Name != "running" ? "" : GetHexIPAddress(instance.PrivateIpAddress),
                KeyName          = instance.KeyName,
                AvailabilityZone = instance.Placement.AvailabilityZone
            }).ToList();
        }
        void worker_DoWork(object sender, DoWorkEventArgs e)
        {
            //validate args
            if (String.IsNullOrEmpty(AWSAccessKey) || String.IsNullOrEmpty(AWSSecretKey))
            {
                e.Result = null;
                return;
            }

            //ec2 client
            var ec2 = AWSClientFactory.CreateAmazonEC2Client(AWSAccessKey,
                                                             AWSSecretKey,
                                                             new AmazonEC2Config().WithServiceURL(RegionHelper.EC2EndpointForRegion(EC2Region))
                                                             );

            var elbClient = AWSClientFactory.CreateAmazonElasticLoadBalancingClient(AWSAccessKey,
                                                                                    AWSSecretKey,
                                                                                    new AmazonElasticLoadBalancingConfig()
            {
                ServiceURL = RegionHelper.ELBEndpointForRegion(EC2Region).Replace("http:", "https:")
            });

            DescribeLoadBalancersResponse loadBalancers = null;

            try
            {
                loadBalancers = elbClient.DescribeLoadBalancers();
            }
            catch (WebException wex)
            {
                var response      = wex.Response as HttpWebResponse;
                var responsveBody = new StreamReader(response.GetResponseStream()).ReadToEnd();
                int a             = 5;
            }

            e.Result = loadBalancers.DescribeLoadBalancersResult.LoadBalancerDescriptions.
                       Select(lb => new AWSLoadBalancerServersRetreiverCompleteEventArgs.LoadBalancer {
                LoadBalancerName = lb.LoadBalancerName,
                InstanceNames    = lb.Instances.Select(instance => instance.InstanceId).ToList()
            }).
                       ToList();
        }