Запрос внутри потока - PullRequest
0 голосов
/ 04 марта 2011

У меня есть 3 комбинированных списка, которые загружаются данными из запросов LINQ при загрузке страницы.Проблема состоит в том, что запросы содержат так много данных, что это приводит к тому, что Internet Explorer перестает отвечать чуть более минуты.

Поскольку существует 3 запроса, моя идея состоит в том, чтобы поместить их в 3 разных потока, но проблемав конце я получаю только сообщение об ошибке: «DataSource и DataSourceID определены в« cbOrganizator ». Удалите одно определение».

cbOrganizator - это комбинированный список.

Воткод:

protected void Page_Load(object sender, EventArgs e)
{
    Bind();
}

public void Osobe()
    {
        PravosudnaAkademijaEntities db = new PravosudnaAkademijaEntities();

        var osoba = from o in db.osobas
                    orderby o.osoba_prezime
                    select new { o.osoba_id, imePrezime = o.osoba_prezime + " " + o.osoba_ime + " | " + o.tijelo.tijelo_naziv + " | " + o.radno_mjesto.rm_naziv_m };

        cbPolaznik.DataSource = osoba;
        cbPolaznik.DataTextField = "imePrezime";
        cbPolaznik.DataValueField = "osoba_id";
        cbPolaznik.DataBind();
        cbPolaznik.Items.Insert(0, " ");

        cbPredavac.DataSource = osoba;
        cbPredavac.DataTextField = "imePrezime";
        cbPredavac.DataValueField = "osoba_id";
        cbPredavac.DataBind();
        cbPredavac.Items.Insert(0, " ");

        cbAOM.DataSource = osoba;
        cbAOM.DataTextField = "imePrezime";
        cbAOM.DataValueField = "osoba_id";
        cbAOM.DataBind();
        cbAOM.Items.Insert(0, " ");
    }

    public void Tijela()
    {
        PravosudnaAkademijaEntities db = new PravosudnaAkademijaEntities();

        var tijelo = from t in db.tijeloes
                     orderby t.tijelo_naziv
                     select new { t.tijelo_id, sve = t.tijelo_naziv + " | " + t.mjesto.zupanija_drzava.zupanija_naziv };

        cbOrganizator.DataSource = tijelo;
        cbOrganizator.DataTextField = "sve";
        cbOrganizator.DataValueField = "tijelo_id";
        cbOrganizator.DataBind();
        cbOrganizator.Items.Insert(0, " ");
    }

    public void Bind()
    {
         Thread tOsobe = new Thread(Osobe);
         tOsobe.Start();
         Thread tTijela = new Thread(Tijela);
         tTijela.Start();
    }

Я не знаю, что не так, поэтому любая помощь будет оценена.Основная идея состоит в том, чтобы разделить запросы на потоки, поэтому, если мой подход неверен, пожалуйста, дайте мне знать.

Ответы [ 2 ]

1 голос
/ 04 марта 2011

если вы действительно хотите сделать это с потоками, я бы предложил выполнить запрос в пуле потоков.вы можете абстрагировать ваш метод так, чтобы он вызывался в делегате метода threadpool
, поэтому я бы заменил связывание на

ThreadPool.QueueUserWorkItem(new WaitCallback(Osobe));
ThreadPool.QueueUserWorkItem(new WaitCallback(Tijela));

, изменив сигнатуру Osobe, и Tijela, чтобы принять Object, например,. public void Osobe(объект a)

вам также понадобится упорядочить вызов через поток, так как я не уверен, примет ли webforms, если привязка происходит в другом потоке.

Все сказанное и выполненноевсе еще чувствую, что метод ajax - лучший путь вперед.

1 голос
/ 04 марта 2011

Вы запускаете темы, но не даете им возможности закончить до загрузки страницы. Я не знаю, как это приводит к вашей конкретной ошибке, но если ваша страница загружается до завершения потока, вы определенно не получите результаты.

Я действительно не понимаю, как вы сможете достичь того, что вы пытаетесь сделать без AJAX.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...