주 응용 프로그램에 "목록"이 있는데 스레드 내에서 해당 요소에 액세스하려고합니다. { "다른 스레드가이 스레드를 소유하고있어이 스레드를 호출 할 수 없습니다."} System.SystemException {System.InvalidOperationException}스레드에서 액세스 목록 요소
답변
DispatcherOperation d = myListBox.Dispatcher.Invoke(DispatcherPriority.Normal, new Action(() =>
{
// access your listbox and return something
}));
그런 다음 반환 값
myValue = d.Result; //Result is of type Object
UI가 아닌 스레드에서 UI에 액세스하려고합니다. .
이 읽기 : http://www.codeproject.com/Messages/2927256/Re-WPF-Delegates-The-calling-thread-cannot-access-.aspx
이을 : 당신은 대리자를 선언하여 크로스 스레드를 사용할 수 있습니다 http://www.switchonthecode.com/tutorials/working-with-the-wpf-dispatcher
감사합니다,하지만 난 목록 멤버에 값을 설정할 수 있어요. Dispatcher를 사용하여 값을 검색하는 방법을 모르겠습니다. – phm
.
private delegate void thread_delegate();
그런 다음 방법을 만들고 목록에 액세스하는 모든 방법을 넣으십시오.
private void SampleMethod()
{
....
}
그런 다음 스레드에 대한 방법을 만드십시오. 그 방법 내부 은
당신이 당신의 스레드를 만들 명세서에private void ThreadMethod()
{
thread_delegate d = new thread_delegate(SampleMethod);
d.Invoke();
}
...
Thread t = new Thread(new ThreadStart(ThreadMethod));
t.Start();
이미이 방법을 시도했지만 작동하지 않습니다. 같은 예외가 발생했습니다 – phm
시도해보십시오.
MylistBox은 목록 상자
namespace TEST
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Thread th = new Thread(AccessList);
th.Start(MylistBox);
}
void AccessList(Object O)
{
ListBox lBox = O as ListBox;
for (int i = 0; i < lBox.Items.Count; i++)
{
MessageBox.Show(lBox.Items[i].ToString());
}
}
}
}
- 1. BackgroundWorker 스레드에서 UI 컨트롤에 액세스
- 2. 구문이 스레드에서 목록
- 3. 스레드에서 FacesContext에 액세스
- 4. 다른 스레드에서 BindingSource에 액세스
- 5. 별도의 스레드에서 app_globals에 액세스
- 6. 복수 스레드에서 sqlite 액세스
- 7. 스레드에서 Form1 속성에 액세스
- 8. 액세스 요소
- 9. 하나 이상의 스레드에서 std :: list에 액세스
- 10. 별도의 스레드에서 ASP.NET 캐시 액세스?
- 11. 안드로이드에서 다른 스레드에서 데이터베이스 액세스
- 12. 목록 요소 hightlight?
- 13. "요소 목록 뒤에"누락되었습니다.
- 14. Java의 복제 목록 요소
- 15. 자바 하나의 요소 목록
- 16. 목록 내의 요소 순환
- 17. 추가 목록 요소
- 18. 목록 요소 합치기
- 19. 안감까지 목록 요소
- 20. 목록 비교/세트 요소
- 21. 목록 요소 업데이트, 하스켈
- 22. 목록 그리드 요소
- 23. 레코드의 요소 목록 \
- 24. 백그라운드 스레드에서 WPF 구성 요소 만들기
- 25. 여러 스레드에서 COM 구성 요소 제어 실행
- 26. RJS의 요소 값 액세스
- 27. id로 jQuery 액세스 요소
- 28. 액세스 배열 요소
- 29. DataGrid 뷰의 액세스 요소
- 30. 플래시의 하위 요소 액세스
솔루션을 제공해 주셔서 감사합니다. 내 목록은 List이며 메서드를 사용하여 n 번째 요소를 가져 오려고하면 응용 프로그램이 정지됩니다. –
phm
이 경우 UI 디스패처를 다음과 같이 복사하십시오. 디스패처 UIdispatcher = Dispatcher.CurrentDispatcher; 스레드를 시작하기 전에 이제 myListBox.Dispatcher 대신 스레드에서 UIdispatcher.Invoke (...)를 사용하십시오. Invoke 메서드를 호출하는 방법을 알려주실 수 있습니까? 나는 당신의 코드를 의미합니다. – Amsakanna
BeginInvoke가 아닌 Invoke를 사용하십시오. d.Result를 원하는 유형으로 캐스트합니다. – Amsakanna