C# 如何在后台线程上执行操作

C# 如何在后台线程上执行操作,c#,mvvm,silverlight-5.0,C#,Mvvm,Silverlight 5.0,我正在从事基于MVVM架构的Silverlight项目。 点击一个按钮,就会执行一个c#linq查询,这需要一些时间来执行(大约一分钟半),因此我的UI会挂起这么长时间,直到收到响应为止 我有一个自定义的进度条,需要在两者之间显示。 我试图在后台线程上执行这个linq语句,但没有成功 当前代码: private void _selectRecords() { //linq-query } 我试过下面的步骤 private void _selectRecords() { Syst

我正在从事基于MVVM架构的Silverlight项目。 点击一个按钮,就会执行一个c#linq查询,这需要一些时间来执行(大约一分钟半),因此我的UI会挂起这么长时间,直到收到响应为止

我有一个自定义的进度条,需要在两者之间显示。 我试图在后台线程上执行这个linq语句,但没有成功

当前代码:

private void _selectRecords()
{
    //linq-query
}
我试过下面的步骤

private void _selectRecords()
{
    System.Threading.Thread worker = new System.Threading.Thread(GetData);
            worker.Start();
}

private void GetData()
{
    //linq-query
}
编辑: 在上述情况下,执行时获得异常
无效的跨线程访问。


如何在后台线程上运行此linq语句?

如何使用BackgroundWorker

在视图类中声明这样的backgroundworker变量

BackgroundWorker _worker;
在视图的构造函数中启动Backgroundworker 像这样

    _worker = new BackgroundWorker();
    _worker.DoWork += new DoWorkEventHandler(_worker_DoWork);
    _worker.ProgressChanged += new ProgressChangedEventHandler(_worker_ProgressChanged);

void _worker_DoWork(object sender, DoWorkEventArgs e)
{
   //call your getdata() method here
    GetData();

}
m_oWorker.RunWorkerAsync();
在按钮单击中,您可以像这样启动此backgroundworker

    _worker = new BackgroundWorker();
    _worker.DoWork += new DoWorkEventHandler(_worker_DoWork);
    _worker.ProgressChanged += new ProgressChangedEventHandler(_worker_ProgressChanged);

void _worker_DoWork(object sender, DoWorkEventArgs e)
{
   //call your getdata() method here
    GetData();

}
m_oWorker.RunWorkerAsync();
使用ProgressChanged事件处理程序,您可以向用户显示进度

_worker_ProgressChanged
我只是想把你的代码整合到