Форум программистов, компьютерный форум, киберфорум
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
15 / 15 / 7
Регистрация: 04.03.2009
Сообщений: 154
1

Создание потока для синхронизации с БД

25.04.2012, 13:26. Показов 1416. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет, в представленном ниже коде происходит подключение к БД, получение данных, отображение через Binding в Grid и создается поток, который периодически должен проверять изменения в БД:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
       public MainWindow()
        {
            InitializeComponent();
            var entityContext = new MenuModelContainer();
            var sortedBaskets = entityContext.Baskets
                .Where(b => b.Orders.Count > 0 && b.Orders.Where(o => o.State == 0).Count() != 0)
                .OrderBy(b => b.DateCreated);
            var latestBaskets = sortedBaskets.Take(TopCount);
            var earliestBaskets = sortedBaskets.Skip(TopCount);
            ListOfEarliestBaskets.DataContext = earliestBaskets;
            ListOfLatestBaskets.DataContext = latestBaskets;
            Thread curTh=Thread.CurrentThread;
            Thread th = new Thread(new ThreadStart(myGetChanges));
            th.Start();
        }
Вот код, в котором получаю измененные данные из БД:
C#
1
2
3
4
5
6
7
8
        public void myGetChanges()
        {
            var earliestBaskets = ((IEnumerable<Basket>)ListOfEarliestBaskets.DataContext);
            var latestBaskets = ((IEnumerable<Basket>)ListOfLatestBaskets.DataContext);
            ListOfEarliestBaskets.DataContext = earliestBaskets.Where(b => b.Id != 0);
            ListOfLatestBaskets.DataContext = latestBaskets.Where(b => b.Id != 0);
            Thread.Sleep(10000);
        }
В строке
C#
1
var earliestBaskets = ((IEnumerable<Basket>)ListOfEarliestBaskets.DataContext);
вываливается эксепшн "The calling thread cannot access this object because a different thread owns it", если я правильно перевел и понял, то объект который я хочу изменить сейчас юзает другой процесс, и я не могу получить к нему доступ, подскажите как решить эту проблему.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.04.2012, 13:26
Ответы с готовыми решениями:

Создание отдельного потока для метода
Как создать отдельный поток для этого метода, мальчики ? public void SetBrightness(int...

Создание файлового потока для чтения тегов mp3
Доброго времени суток! Есть следующий вопрос: хочу написать приложение для работы с файлами mp3....

Могут ли 2 потока корректно читать одну переменную без методов синхронизации в один момент времени
Добрый день. Есть пара вопросов по поводу потоков. 1. Могут ли 2 потока корректно читать одну...

Создание консоли для потока
Вомзожно ли создать несколько консолей для одного процесса ? Хотелось бы каждому потоку выделить...

3
101 / 100 / 18
Регистрация: 04.09.2009
Сообщений: 133
25.04.2012, 15:00 2
1) Какой тип у объекта ListOfEarliestBaskets?
2) Какого типа проект: WinForms или WPF ?
0
15 / 15 / 7
Регистрация: 04.03.2009
Сообщений: 154
25.04.2012, 15:01  [ТС] 3
Цитата Сообщение от dextermd Посмотреть сообщение
1) Какой тип у объекта ListOfEarliestBaskets?
2) Какого типа проект: WinForms или WPF ?
1) ItemsControl
2) WPF
0
101 / 100 / 18
Регистрация: 04.09.2009
Сообщений: 133
25.04.2012, 15:07 4
Попробуйте такую конструкцию:
C#
1
2
3
IEnumerable<Basket> baskets;
Action action = () => baskets = ListOfEarliestBaskets.DataContext as IEnumerable<Basket>;
Dispatcher.Invoke(action);
0
25.04.2012, 15:07
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.04.2012, 15:07
Помогаю со студенческими работами здесь

Создание потока для каждой кнопки
в программе есть 2 кнопки, одна запускает процесс с бесконечным циклом (while(B==true)), вторая...

Создание потока для проигрывания файла
Есть функция обработки данных с порта, данные обрабатываются каждую секунду. Хотелось бы сделать...

При синхронизации функции из потока возникает ошибка: "Out of memory"
Доброго времени суток. Есть код:...

Создание потока для отображения надписи на форме
Здравствуйте. Есть форма с label3, в текст которого выводится некая строка. Изначально...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru