Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/13: Рейтинг темы: голосов - 13, средняя оценка - 5.00
36 / 34 / 13
Регистрация: 03.06.2010
Сообщений: 215
1

Ошибка: Вызывающий поток не может получить доступ к данному объекту...

19.09.2013, 03:32. Показов 2515. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Хочу выполнять MyThreadFunction в отдельном потоке, т.к. работает потенциально медленно.
Получаю ошибку: Вызывающий поток не может получить доступ к данному объекту, так как владельцем этого объекта является другой поток.
Смотрел примеры, но ничего путного из этого не вышло.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.IO;
using System.Threading;
 
namespace FCleaner
{
    /// <summary>
    /// Логика взаимодействия для MainWindow.xaml
    /// </summary>
    /// 
 
    public partial class MainWindow : Window
    {
        private delegate void DelegateAddMessage();
        DelegateAddMessage _delAddMsg;
 
        public MainWindow()
        {
            InitializeComponent();
            _delAddMsg = new DelegateAddMessage(this.MyThreadFunction);
        }
 
        void MyThreadFunction()
        {
            
            //string[] fullfilesPath = Directory.GetFiles(@"e:\music\", "*.mp3", SearchOption.AllDirectories);
            IEnumerable<string> files = Directory.EnumerateFiles(@"e:\music\", "*.mp3", SearchOption.AllDirectories);
            foreach (string file in files)
            {
                listBox1.Items.Add(file);
            }
        }
   
        private void button1_Click(object sender, RoutedEventArgs e)
        {
            //(new Action(MyThreadFunction)).BeginInvoke(null, null);
            Thread thr = new Thread(MyThreadFunction);
            thr.SetApartmentState(ApartmentState.STA);
            thr.Start();
            MyThreadFunction();
        }
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.09.2013, 03:32
Ответы с готовыми решениями:

[WPF] Ошибка c ComboBox - «вызывающий поток не может получить доступ к данному объекту»
Суть заключается в том, что имеется ComboBox. Я выбираю нужную мне сеть и получаю статистику. При...

Ошибка: вызывающий поток не может получить доступ к данному объекту, так как владельцем этого объекта является другой поток.
Ошибка в &quot;progressBar1.Value += 50;&quot;, вызывающий поток не может получить доступ к данному объекту,...

Контрол в Task: Вызывающий поток не может получить доступ к данному объекту
На Net 4.5 и WPF есть такой код (при клике на кнопку): private async void but1_Click(object...

[WPF] Вызывающий поток не может получить доступ к данному объекту, т.к. владельцем этого объекта является другой поток
Здравствуйте пытаюсь реализовать кросспоточное пополнение listbox в WPF С#, но и в итоге получаю...

2
79 / 79 / 11
Регистрация: 29.08.2013
Сообщений: 263
19.09.2013, 07:01 2
ну а диспетчер чем Вам не угодил?
C#
1
2
3
Dispatcher.BeginInvoke(DispatcherPriority. Background,new Action(() => {
 // тут код
}));
0
36 / 34 / 13
Регистрация: 03.06.2010
Сообщений: 215
19.09.2013, 13:30  [ТС] 3
Dexa, ошибка больше не беспокоит, но программа все равно виснет
C#
1
2
3
4
5
6
7
8
9
10
11
12
 void MyThreadFunction()
        {
            Dispatcher.BeginInvoke(DispatcherPriority.Background, new Action(() =>
            {
                //string[] fullfilesPath = Directory.GetFiles(@"e:\music\", "*.mp3", SearchOption.AllDirectories);
                IEnumerable<string> files = Directory.EnumerateFiles(@"e:\music\", "*.mp3", SearchOption.AllDirectories);
                foreach (string file in files)
                {
                    listBox1.Items.Add(file);
                }
            }));
        }
0
19.09.2013, 13:30
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.09.2013, 13:30
Помогаю со студенческими работами здесь

System.InvalidOperationException: "Вызывающий поток не может получить доступ к данному объекту, так как владельцем этого
System.InvalidOperationException: &quot;Вызывающий поток не может получить доступ к данному объекту, так...

Вызывающий поток не может получить доступ
&quot;Вызывающий поток не может получить доступ к данному объекту, так как владельцем этого объекта...

Биндинг в потоке: поток не может получить доступ к интерфейсу из другого потока
модераторам: тема про C# а не UI, так что не переносите &gt;.&lt; Вопрос к знатокам как сделать биндиг...

Вызывающий поток не может получить доступ к объекту, так как его владельцем является другой поток
Есть форма MainWindo, есть класс AB. В форме единая точка доступа к элементам формы. ...


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

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