public override void ProcessData()
        {
            RaiseProcessingUpdate(new EventArg<string>("Retrieving FinViz data..."));
            foreach (var exchange in exhcanges)
            {
                CsvDataAdapter adapter = new CsvDataAdapter(true);
                adapter.DataRetrieveCompleted += adapter_DataRetrieveCompleted;
                adapter.DataRetrieveError += adapter_DataRetrieveError;
                string[] values = exchange.Split('=');
                if (values.Length == 2)
                {
                    if (FilterString.Contains("&f="))
                        adapter.CurrentURL = exportUrl + FilterString + "," + values[1];
                    else
                        adapter.CurrentURL = exportUrl + FilterString + "&f=" + values[1];
                }
                else
                {
                    adapter.CurrentURL = exportUrl;
                }

                adapter.RetrieveData();
            }
        }
        protected override void OnInnerProcessorCompleted(EventArg<System.Data.DataTable> e)
        {
            try
            {
                querySetCount = 0;

                RaiseProcessingUpdate(new EventArg<string>("Getting Yahoo Finance data..."));
                var col = e.Data.Columns.Add(FieldConstant.ExDividendDate, typeof(string));
                col = e.Data.Columns.Add(FieldConstant.DividendPayDate, typeof(string));
                col = e.Data.Columns.Add(FieldConstant.DividendYield, typeof(string));
                col = e.Data.Columns.Add(FieldConstant.TargetPrice1y, typeof(float));

                //get the filtered data
                //contruct the data
                //get back the table

                var result = ConstructURL(e.Data);

                foreach (string url in result)
                {
                    CsvDataAdapter adapter = new CsvDataAdapter(false);
                    adapter.DataRetrieveCompleted += adapter_DataRetrieveCompleted;
                    adapter.DataRetrieveError += adapter_DataRetrieveError;
                    adapter.CurrentURL = url;
                    adapter.RetrieveData();
                    Interlocked.Increment(ref querySetCount);
                }
            }
            catch (Exception err)
            {

                RaiseProcessingError(new EventArg<Exception>(err));
            }
        }