Index: trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis.Views/3.3/RegressionInstanceProviderView.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis.Views/3.3/RegressionInstanceProviderView.cs	(revision 13413)
+++ trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis.Views/3.3/RegressionInstanceProviderView.cs	(revision 13414)
@@ -22,4 +22,5 @@
 using System;
 using System.IO;
+using System.Threading.Tasks;
 using System.Windows.Forms;
 using HeuristicLab.MainForm;
@@ -44,16 +45,30 @@
       if (importTypeDialog.ShowDialog() == DialogResult.OK) {
         IRegressionProblemData instance = null;
-        try {
-          instance = Content.ImportData(importTypeDialog.Path, importTypeDialog.ImportType, importTypeDialog.CSVFormat);
-        } catch (IOException ex) {
-          ErrorWhileParsing(ex);
-          return;
-        }
-        try {
-          GenericConsumer.Load(instance);
-          instancesComboBox.SelectedIndex = -1;
-        } catch (IOException ex) {
-          ErrorWhileLoading(ex, importTypeDialog.Path);
-        }
+
+        Task.Factory.StartNew(() => {
+          var mainForm = (MainForm.WindowsForms.MainForm)MainFormManager.MainForm;
+          // lock active view and show progress bar
+          IContentView activeView = (IContentView)MainFormManager.MainForm.ActiveView;
+
+          try {
+            var progress = mainForm.AddOperationProgressToContent(activeView.Content, "Loading problem instance.");
+
+            Content.ProgressChanged += (o, args) => { progress.ProgressValue = args.ProgressPercentage / 100.0; };
+
+            instance = Content.ImportData(importTypeDialog.Path, importTypeDialog.ImportType, importTypeDialog.CSVFormat);
+          } catch (IOException ex) {
+            ErrorWhileParsing(ex);
+            mainForm.RemoveOperationProgressFromContent(activeView.Content);
+            return;
+          }
+          try {
+            GenericConsumer.Load(instance);
+            instancesComboBox.SelectedIndex = -1;
+          } catch (IOException ex) {
+            ErrorWhileLoading(ex, importTypeDialog.Path);
+          } finally {
+            mainForm.RemoveOperationProgressFromContent(activeView.Content);
+          }
+        });
       }
     }
Index: trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis/3.3/DataAnalysisInstanceProvider.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis/3.3/DataAnalysisInstanceProvider.cs	(revision 13413)
+++ trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis/3.3/DataAnalysisInstanceProvider.cs	(revision 13414)
@@ -23,4 +23,6 @@
 using System.Collections;
 using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
 using System.Globalization;
 using System.IO;
@@ -35,9 +37,20 @@
     where ImportType : DataAnalysisImportType {
 
+    public event ProgressChangedEventHandler ProgressChanged;
 
     public TData ImportData(string path, ImportType type, DataAnalysisCSVFormat csvFormat) {
       TableFileParser csvFileParser = new TableFileParser();
+      long fileSize = new FileInfo(path).Length;
+      csvFileParser.ProgressChanged += (sender, e) => {
+        OnProgressChanged(e / (double)fileSize);
+      };
       csvFileParser.Parse(path, csvFormat.NumberFormatInfo, csvFormat.DateTimeFormatInfo, csvFormat.Separator, csvFormat.VariableNamesAvailable);
       return ImportData(path, type, csvFileParser);
+    }
+
+    protected virtual void OnProgressChanged(double d) {
+      var handler = ProgressChanged;
+      if (handler != null)
+        handler(this, new ProgressChangedEventArgs((int)(100*d), null));
     }
 
Index: trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis/3.3/TableFileParser.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis/3.3/TableFileParser.cs	(revision 13413)
+++ trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis/3.3/TableFileParser.cs	(revision 13414)
@@ -30,5 +30,5 @@
 
 namespace HeuristicLab.Problems.Instances.DataAnalysis {
-  public class TableFileParser {
+  public class TableFileParser : Progress<long> { // reports the number of bytes read
     private const int BUFFER_SIZE = 65536;
     // char used to symbolize whitespaces (no missing values can be handled with whitespaces)
@@ -310,4 +310,9 @@
         private set { currentLine = value; }
       }
+      public long BytesRead {
+        get;
+        private set;
+      }
+
 
       public Tokenizer(StreamReader reader, NumberFormatInfo numberFormatInfo, DateTimeFormatInfo dateTimeFormatInfo, char separator) {
@@ -322,4 +327,11 @@
         if (!reader.EndOfStream) {
           CurrentLine = reader.ReadLine();
+          try {
+            BytesRead = reader.BaseStream.Position;
+          } catch (IOException) {
+            BytesRead += CurrentLine.Length + 2; // guess
+          } catch (NotSupportedException) {
+            BytesRead += CurrentLine.Length + 2;
+          }
           int i = 0;
           foreach (var tok in Split(CurrentLine)) {
@@ -449,4 +461,6 @@
           rowValues.Add(row);
         }
+
+        OnReport(tokenizer.BytesRead);
       }
     }
