Jag bygger en liten Windows App som ska utföra lite åtgärder på burken, leta efter vissa filer i processlistan mm. mm.
Nu skulle jag vilja visa för användaren under tiden vad som händer medans den jobbar.. ett statusfönster där alla tasks som app´en utför skrivs ut.
Svårt att svara på då jag tycker din information är lite bristfällig. Men jag utgår ifrån att din applikation ligger och kör med ett öppet fönster och då hade jag lagt ditt en ListView/GridView kontroll över hela fönstern och bara börjat lägga till items i den listan för när något händer. Och antingen kan du ta bort dem när de är färdiga, eller så markera du de som färdiga på något sätt så du kan få en lite log över vad som har hänt.
Det intressant här är ju att du helt plötsligt börja programmera multitrådat och med alla de problem och krav det ställer, när man skall uppdatera någon kontroll som ligger i huvudtråden...
Ja nu fick jag ju iaf ut en liten lista där.. inte helt som jag hade tänkt mig men det är en början iaf. (y)
Nästa problem är att jag inte får min check att fungera riktigt..
Jag har en array med filnamn som jag vill checka mot ex. aktiva processer.
ArrayList arrClients = new ArrayList();
arrClients.Add("notep");
arrClients.Add("calc");
arrClients.Add("firefo");
Sedan loopar jag alla processer och checkar var och en mot denna array, in theory any way. ;)
foreach (Process process in Process.GetProcesses())
{
string strProcess = process.ProcessName.ToString().ToLower();
int hit = arrClients.IndexOf(strProcess);
if (hit > -1)
{
//Found process
}
}
Tyvärr fungerar inte IndexOf så som jag vill, jag måste ange hela process-namnet i array´en för att den ska hitta den.. jag vill ju få en "hit" även på delar ur namnet, alltså enligt namnet i min array.
Ur mitt exempel ovan får jag bara en hit på "calc" även att dom andra också borde komma med.
Då måste du skapa en egen matchingsfunktion. Eftersom den som du använder med IndexOf kommer att match hela namnet.
Jag hade börjat med att använda en List<> istället för ArrayList och där finns en method som heter Find(). Som du kan använd för att skapa en egen sökmethod.
string strProcess = process.ProcessName.ToString().ToLower();
string process = myClientList.Find(
delegate(string s)
{
//-- I vanliga fall så hade man skrivit så här. Men då matchar du återigen hela ordet.
return s == strProcess;
//-- Så vad du måste göra här är att du måste använda dig av regulare Expressions
//-- för att använda dina namnen i din lista mot namnet i strProcess. Tyvärr är jag
//-- fördålig på regularexpressions så jag kan inte hjälpa dig med det.
...
}
);
Hmmm.. kom precis på att du borde ju kunna vända på dig IndexOf isället... Så istället för att hela order skall finnas med i din Lista, så skulle ju orden i listan kunna jämföras mot ditt processnamn.
string strProcess = process.ProcessName.ToString().ToLower();
for(int i = 0; i < arrClients.Length; i++)
{
int founded = strProcess.IndexOf(arrClients[i]);
//-- Ingen match fortsätt igenom listan
if( foundend == -1)
continue;
//-- Japp vi har en träff, vad skall jag göra nu????
}
- M
266 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2