Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用BackgroundWorker时无过载_C#_Wpf_Multithreading_Backgroundworker - Fatal编程技术网

C# 使用BackgroundWorker时无过载

C# 使用BackgroundWorker时无过载,c#,wpf,multithreading,backgroundworker,C#,Wpf,Multithreading,Backgroundworker,当我尝试向地图添加大量图形时,我遇到了ContextSwitchDeadlock。我很想使用BackgroundWorker类,尤其是因为我从来没有机会,但我不知道在这种情况下如何使用 C#: 我知道这个逻辑是错误的,但我不知道如何解决它。我已经参考了有关如何使用该类的帮助,但是提供的信息不是针对这种特定情况的。 我想做的是: 当用户单击搜索按钮时,它将运行查询。这很好用。问题是当它运行GeneralQueryTask_ExecuteCompleted时,如果有大量记录,我会收到一条Contex

当我尝试向地图添加大量图形时,我遇到了ContextSwitchDeadlock。我很想使用BackgroundWorker类,尤其是因为我从来没有机会,但我不知道在这种情况下如何使用

C#:

我知道这个逻辑是错误的,但我不知道如何解决它。我已经参考了有关如何使用该类的帮助,但是提供的信息不是针对这种特定情况的。 我想做的是:

当用户单击搜索按钮时,它将运行查询。这很好用。问题是当它运行GeneralQueryTask_ExecuteCompleted时,如果有大量记录,我会收到一条ContextSwitchDeadlock消息。这也会使UI没有响应

根据我所读到的,我需要指出:

if (worker.CancellationPending == true)
{
    e.Cancel = true;
    break;
}

执行耗时任务的位置。问题是我没有重载的方法来执行QueryTask和BackgroundWorker。任何帮助都将不胜感激。如果您需要更多信息,请让我知道。

我很惊讶它竟然超过了QueryDataGrid.Visibility=Visibility.Visible;您无法从后台线程访问UI元素。如果您的
完成
事件也需要很长时间,为什么不将其放入
do\u work
中呢?您也可以从
do\u work
调用UI。问题在于已完成的事件。查询运行正常。。我需要完成的foreach循环是一项后台工作任务。我非常确定整个过程都需要返工。。恐怕根本不可能使用BackgroundWorker。您完成的事件就是dowork事件。您的事件名称令人困惑,您的代码显示:
bw.DoWork+=new DoWorkEventHandler(GeneralQueryTask\u ExecuteCompleted)所以DoWork是您的执行完成。。。
if (worker.CancellationPending == true)
{
    e.Cancel = true;
    break;
}