webForumDet fria alternativet

Statusfönster där jag kan skriva ut tasks. (Windows App)

.NET

4 svar · 524 visningar · startad av Palle

Medlem sedan apr. 20003 174 inlägg
Frågan#1

Tja,

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.

Vad skulle ni rekommendera för control för detta?

Tack med förhanden! :f

Medlem sedan maj 20012 812 inlägg
#2

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...

- M

Medlem sedan apr. 20003 174 inlägg
#3

Jag sitter enbart och leker, och egentligen vet jag kanske inte vad jag håller på med.. men det är kul. ;)

Ja, det är en app som ligger och kör med ett öppet fönster så jag ska genast testa ditt förslag. :bire

Medlem sedan apr. 20003 174 inlägg
#4

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.

Vad gör jag för fel? :r

Medlem sedan maj 20012 812 inlägg
#5

Palle skrev:

IndexOf

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
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
138 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)