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

本文关键字:执行 操作 线程 后台 | 更新日期: 2023-09-27 18:13:42

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

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

当前代码:

private void _selectRecords()
{
    //linq-query
}

I tried below steps,

private void _selectRecords()
{
    System.Threading.Thread worker = new System.Threading.Thread(GetData);
            worker.Start();
}
private void GetData()
{
    //linq-query
}
编辑:

在上述情况下,执行时得到异常Invalid cross-thread access.

private void _selectRecords()
{
    System.Threading.Thread worker = new System.Threading.Thread(GetData);
            worker.Start();
}
private void GetData()
{
   ApplicationConstants.AppConstants.WaitCursor = true; //MY PROGRESS BAR
    Deployment.current.Dispatcher.BeginInvoke(()=>{
                //linq-query        
        });
}

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

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

如何使用BackgroundWorker

在你的视图Class

中像这样声明一个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();

使用进度更改事件处理程序,您可以向用户显示进度

_worker_ProgressChanged

我只是试着把你的代码合并成这样的东西