Mam aplikację WinForm, problem związany jest z wątkami. Ponieważ nazywam "MyCustomCode(), który tworzy nowy wątek i wywołuje metodę " SomeMethod() ", który następnie dostęp do MessageBox.Show (...).Problem z nawijaniem WinForm, drugi wątek nie może uzyskać dostępu do 1. głównych form kontroli
Problem dotyczy wątkowania, ponieważ nowo utworzony wątek próbuje uzyskać dostęp do formantu utworzonego w innym wątku.
otrzymuję błąd:
pracy Cross wątek nie ważne: kontrola „TestForm” obejrzano z wątku innego niż wątek został utworzony na.
public TestForm()
{
InitializeComponent();
// custom code
//
MyCustomCode();
}
public void SomeMethod()
{
// ***** This causes an error ****
MessageBox.Show(this,
ex.Message,
"Error",
MessageBoxButtons.OK,
MessageBoxIcon.Error
);
}
private void InitializeAutoUpdater()
{
// Seperate thread is spun to keep polling for updates
ThreadStart ts = new ThreadStart(SomeMethod);
pollThread = new Thread(ts);
pollThread.Start();
}
Aktualizacja
Jeśli spojrzeć na ten przykład http://www.codeproject.com/KB/cs/vanillaupdaterblock.aspx metoda CheckAndUpdate dzwoni MessageBox.Show (..) to właśnie mój problem. Pomyślałbym, że kod jest dobry!
Zabawna rzecz czy ten kod działał dobrze w piątek ???
Czy to możliwe, ponieważ zainstalowałem .net 3.5? Czy to jest funkcja "3.5"? Wątpię, ale to jedyne wytłumaczenie! –
(Zainstalowałem go ostatnio ..) –