public async void ReadDataFromFile(string path)
        {
            //parse the data in a none blocking way
            Cursor.Current = Cursors.WaitCursor;

            var data = await Task.Run(() => parseData(path));

            Cursor.Current = Cursors.Default;
            if (data == null)
            {
                MessageBox.Show("Genetic Map is in incorrect format.\nFormat example :\nMarker name\tChromosome (i)\tGenetic location(cM)", "Format Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            //save the data in a temp holder

            List <Dictionary <int, string> > partialData = new List <Dictionary <int, string> >();
            int counter = 0;

            foreach (Dictionary <int, string> dic in data)
            {
                partialData.Add(dic);
                counter++;
                if (counter > 99)
                {
                    break;
                }
            }
            TempDataHolder.PartialTempFileHolder = partialData;
            TempDataHolder.FullTempFileHolder    = data;
            //hide the table
            dataTable.ChangeTableVisibility(false);
            //fill the table
            fillTable(partialData);
            //show the table
            dataTable.ChangeTableVisibility(true);
        }