Aktualizacja listy plików w listboxie po dodaniu nowego w trakcie działania programu.

0

Witajcie.

Piszę sobie program, który ma możliwość dodania "gracza" do bazy danych. Program wymaga podania jego nicku oraz adresu e-mail. Dane te są zapisywane do pliku z nazwą "nick".txt. Lecz po dodaniu takiego gracza program nie aktualizuje listy, a po wymuszeniu tego wyświetla błąd. Daję link do całego projektu, jeśli ktoś byłby tak łaskaw pobrać i zekrnąć na kod i formy i nakierować mnie jak mam to rozwiązać bo byłbym wdzięczny. Dodam jeszcze, że jestem początkującym programistą jeśli chodzi o język c#.

Pozdrawiam, Przemek

http://www.sendspace.pl/file/ab125ba793bc02de897568d

0

Jest kilka rozwiązań - na przykład stworzenie wątku, który co kilka sekund sprawdza, czy pliki w folderze różnią się od plików, które posiadamy na liście, albo - lepszy - użycie klasy System.IO.FileSystemWatcher, która jest stworzona do obserwowania co się dzieje w danym folderze. Pewnie jest też coś w WinAPI, ale nie zagłębiam się w to zanadto. Jak użyć tej klasy? Tworzymy konstruktor z folderem, który obserwujemy, jako parametrem, przypisujemy zdarzenie co się dzieje, gdy coś się zmieni i używamy albo asynchronicznych metod, albo synchronicznych z użyciem wątków. Ja, dla przykładu, napisałem to tak:

public Form1()
        {
            InitializeComponent();

            FileSystemWatcher FSW = new FileSystemWatcher(Application.StartupPath);
            FSW.Created += new FileSystemEventHandler(FSW_Created);

            Thread thr = new Thread(new ThreadStart(new Action(delegate() {
                while (true)
                    FSW.WaitForChanged(WatcherChangeTypes.All);
            })));
            thr.Start();
        }

        void FSW_Created(object sender, FileSystemEventArgs e)
        {
            FileInfo FI = new FileInfo(e.FullPath);
            MessageBox.Show(string.Format("Dodano nowy plik: {0} ({1} kB)", FI.Name, FI.Length / 1024));
        }

Metoda WaitForChanged oczekuje na określoną zmianę w folderze, w tym przypadku - na jakąkolwiek. Jesteśmy o tej zmianie poinformowani w zdarzeniu Created, które jest poniżej, i z parametru możemy odczytać conieco o pliku, resztę możemy sami uzyskać. Na końcu działania programu należy jednak wyłączyć wątek thr, inaczej proces aplikacji się nie zamknie (pomimo, że okna już nie będzie).

0

Dziękuję za odpowiedź, ale napisałem już, że dopiero zaczynam i nie za bardzo rozumiem ten kod. Po wklejeniu, wyświetla mi takie errory:

Error	1	Invalid token 'foreach' in class, struct, or interface member declaration	C:\Documents and Settings\kyeZ\Moje dokumenty\Visual Studio 2008\Projects\ListBoxy\ListBoxy\Form1.cs	51	13	ListBoxy
Error	2	; expected	C:\Documents and Settings\kyeZ\Moje dokumenty\Visual Studio 2008\Projects\ListBoxy\ListBoxy\Form1.cs	51	34	ListBoxy
Error	3	Invalid token '(' in class, struct, or interface member declaration	C:\Documents and Settings\kyeZ\Moje dokumenty\Visual Studio 2008\Projects\ListBoxy\ListBoxy\Form1.cs	51	55	ListBoxy
Error	4	Invalid token 'this' in class, struct, or interface member declaration	C:\Documents and Settings\kyeZ\Moje dokumenty\Visual Studio 2008\Projects\ListBoxy\ListBoxy\Form1.cs	54	17	ListBoxy
Error	5	Invalid token '(' in class, struct, or interface member declaration	C:\Documents and Settings\kyeZ\Moje dokumenty\Visual Studio 2008\Projects\ListBoxy\ListBoxy\Form1.cs	54	36	ListBoxy
Error	6	Invalid token ')' in class, struct, or interface member declaration	C:\Documents and Settings\kyeZ\Moje dokumenty\Visual Studio 2008\Projects\ListBoxy\ListBoxy\Form1.cs	54	46	ListBoxy
Error	7	Expected class, delegate, enum, interface, or struct	C:\Documents and Settings\kyeZ\Moje dokumenty\Visual Studio 2008\Projects\ListBoxy\ListBoxy\Form1.cs	61	17	ListBoxy
Error	8	Expected class, delegate, enum, interface, or struct	C:\Documents and Settings\kyeZ\Moje dokumenty\Visual Studio 2008\Projects\ListBoxy\ListBoxy\Form1.cs	73	49	ListBoxy
Error	9	Expected class, delegate, enum, interface, or struct	C:\Documents and Settings\kyeZ\Moje dokumenty\Visual Studio 2008\Projects\ListBoxy\ListBoxy\Form1.cs	77	49	ListBoxy
Error	10	Type or namespace definition, or end-of-file expected	C:\Documents and Settings\kyeZ\Moje dokumenty\Visual Studio 2008\Projects\ListBoxy\ListBoxy\Form1.cs	82	13	ListBoxy
Error	11	The type or namespace name 'Thread' could not be found (are you missing a using directive or an assembly reference?)	C:\Documents and Settings\kyeZ\Moje dokumenty\Visual Studio 2008\Projects\ListBoxy\ListBoxy\Form1.cs	24	13	ListBoxy
Error	12	The type or namespace name 'Thread' could not be found (are you missing a using directive or an assembly reference?)	C:\Documents and Settings\kyeZ\Moje dokumenty\Visual Studio 2008\Projects\ListBoxy\ListBoxy\Form1.cs	24	30	ListBoxy
Error	13	The type or namespace name 'ThreadStart' could not be found (are you missing a using directive or an assembly reference?)	C:\Documents and Settings\kyeZ\Moje dokumenty\Visual Studio 2008\Projects\ListBoxy\ListBoxy\Form1.cs	24	41	ListBoxy
Error	14	A field initializer cannot reference the non-static field, method, or property 'ListBoxy.Form1.file'	C:\Documents and Settings\kyeZ\Moje dokumenty\Visual Studio 2008\Projects\ListBoxy\ListBoxy\Form1.cs	53	56	ListBoxy



 
0

Jakbyś najechał na podkreślony na czerwono napis np. Thread to podpowiedź jak naprawić "błąd" sama by się pokazała, widocznie jesteś na to zbyt leniwy. Po angielsku też chyba nic nie rozumiesz, skoro:

are you missing a using directive or an assembly reference?

nie potrafi Cię naprowadzić na rozwiązanie problemu.

0

Nie, brakuje jakiejś biblioteki, tak? Proszę o wyrozumiałość.

0

większość błędów z tej listy to rzeczy związane ze składnią. visual studio podkreśla na czerwono nieprawidłowe miejsca, przyjrzyj się uważnie pierwszemu z nich (pierwszemu, bo pozostałe mogą być jego konsekwencją).

1 użytkowników online, w tym zalogowanych: 0, gości: 1