BackgroundWorker没有在单独的线程上运行

时间:2016-08-23 08:23:30

标签: c# sql multithreading

因此,当用户与窗口交互时,我尝试使用BackgroundWorker为我提取一些数据。我使用BW而不是async / await,因为该项目是在.NET 4.0中制作的,显然它必须保持这种状态。

由于某种原因,工作人员阻止主线程直到它完成,因为用户无法与窗口交互直到工作完成。

以下是我使用的代码(删除了非必要部分)

 private Dictionary<string, DataSet> estadisticas;
 private Dictionary<string, int> count;

 private void Window_Loaded(object sender, RoutedEventArgs e) {
    estadisticas = new Dictionary<string, DataSet>();
    count = new Dictionary<string, int>();
    BackgroundWorker bg = new BackgroundWorker();
    bg.DoWork += new DoWorkEventHandler(bg_DoWork);
    bg.RunWorkerAsync();
}

private void bg_DoWork(object sender, DoWorkEventArgs e)
{
    GetData();
}

private void GetData()
{
    foreach (DataRowView row in DEstcli.estadisticas.Tables["tabla_propuesta"].DefaultView)
    {
        if (!estadisticas.ContainsKey(row.Row["CodArt"].ToString())) {
                    var articulo = row.Row["CodArt"].ToString();
                    int counter;
                    var res = new resumen_esta[3];
                    DataSet data = DEstcli.dataset(articulo, almacenes, out counter, res);
                    estadisticas.Add(row.Row["CodArt"].ToString(), data);
                    count.Add(row.Row["CodArt"].ToString(), counter);
                }
    }
}

稍后编辑:将BackgroundWorker更改为具有Priority.Lowest的线程会打开我的窗口,但我无法对其执行任何操作。数据网格显示但不是它们的完整宽度,由于某种原因,窗口不会完成初始化,直到线程完成。

使用调试器,我可以看到所有内容都在主线程中执行。如果我冻结主线程,它将停止获取数据。我可以看到我的帖子是用我给它的名字创建的,但它不会起作用。

0 个答案:

没有答案