mixtape774
@mixtape774
Занимаюсь Web, Desktop разработкой и реверсингом

Как обратится к экземпляру класса из другого потока (из потока формы к новому потоку)?

Привет. Как обратится к экземпляру класса который был создан в другом потоке? В WinForms достаточно вызвать Invoke, чтобы изменить компонент из другого потока. Мне нужно тоже самое, только для моего класса. Какие способы есть? Спасибо.

Вот пример:
class People() {
	public void Say(string message) {}
}

class Form {	
	public Form() {		
		Task.Factory.StartNew(() => { // или через new Thread().Start
			// :отдельный поток
			People bob = new People();
			bob.Say("Hello");
		}
	}

	void OnButtonClick() {
		// :поток формы
		// Как вызвать bob.Say? чтобы была соблюдена потокобезопасность и в Task и в коде ниже
		bob.Say("Bye");
	}
}

// В дополение
// Пример с Dispatcher на формах, который я имел ввиду
class People() {
	public People(Action action) {
		action(); // потокобезопасный вызов
	}
}

class Form {
	Action action;

	void SafeThreadCall() {
		if (this.InvokeRequired) {			
			this.Invoke(action);
			return;
		}
		this.Text = "New window caption!";
	}
}
  • Вопрос задан
  • 299 просмотров
Пригласить эксперта
Ответы на вопрос 1
tomnolane
@tomnolane
профессиональный разработчик
Dispatcher.Invoke(()=>{ bob.Say("Bye"); }); - ???
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы