Avatar billede karl-koder Nybegynder
19. marts 2008 - 00:57 Der er 9 kommentarer og
1 løsning

Threading der ikke helt virker ?

Hejsa,

Jeg har en metode der laver lidt af hvert som jeg skal have til at køre i en tråd for sig. Og for ikke at poste hele min metode her har jeg fjernet en del af koden. Jeg har sat noget forklaring ind i koden for at skabe lidt overblik

public string CreateExcelFile(string tableId, int[] measures, string email)
{
    string path = @"D:\www\site\input\";
    StreamWriter sw = File.CreateText(path + "franettet.xls");
    List<TableItem> objList = GetAllTables();
    . . .
    Her generere jeg indholdet i en excel fil.
    . . .

    string path1 = @"D:\BatchFiles\";
    StreamWriter sw1 = File.CreateText(path1 + "" + dateStamp + "" + timeStamp + ".bat");
    . . .
    Her skriver jeg det der skal være i .bat filen
    . . .

    string path2 = @"D:\www\site\output\";
    string file = null;
    while ((file == null))
    {
        if (!File.Exists(path1 + "" + dateStamp + "" + timeStamp + ".bat"))
        {
            . . .
            Her trækker jeg en .tif fil fra serveren og laver den om til jpg.
            Og filen sendes med mail til en bruger
            . . .
           
            break;
        }
    }

    //--- Sender dato og klokkeslet retur.
    return file;
}

Den batch fil jeg smidder startes af en windows service som sætter nogle processer igang på serveren som tager et lille minuts tid. Jeg vil derfor have det min metode til at køre i en tråd for sig, men der sker desværre ikke en rygende hatfis når jeg prøver på det.

Så jeg tænkte at det måske ikke var muligt at lave filer, gemme dem og så loope for at se om batch filen er slettet i en tråd.

Så hvis der sidder nogle med noget erfaring på dette område er det meget velkommen ;o)
Avatar billede kalp Novice
19. marts 2008 - 08:11 #1
du skal nok lave din metode om til, at mode 1 parameter kun.

public static string CreateExcelFile(object obj){
  Information information = obj as Information;
  int[] measures = information.Measures;
  string tableId = information.TableId;
  string email  = information.Email;

    string path = @"D:\www\site\input\";
    StreamWriter sw = File.CreateText(path + "franettet.xls");
    List<TableItem> objList = GetAllTables();
    string path1 = @"D:\BatchFiles\";
    StreamWriter sw1 = File.CreateText(path1 + "" + dateStamp + "" + timeStamp + ".bat");
    string path2 = @"D:\www\site\output\";
    string file = null;
    while ((file == null))
    {
        if (!File.Exists(path1 + "" + dateStamp + "" + timeStamp + ".bat"))
        {
            break;
        }
    }
    return file;
}

private class Information{
  public string TableId;
  public int[] Measures;
  public string Email;
  public Information(){}
}



og for at oprette tråden..

Thread newThread = new Thread(klasseHvorIDenNyeMetodeBefinderSig.CreateExcelFile);
Information information = new Information();
information.TableId = "et eller andet";
information.Measures = null;
information.Email = "et eller andet";
newThread.Start(information);

det burde være det..

du skal bare rette data'en her også selvfølgelig

information.TableId = "et eller andet";
information.Measures = null;
information.Email = "et eller andet";


det hele er utestet, men sådan forstod jeg lige API'et ved et hurtigt kig.
Avatar billede karl-koder Nybegynder
19. marts 2008 - 11:01 #2
Ok det vil jeg lige kigge på senere, jeg sidder desværre ikke min bærbar før i eftermiddag.

Jeg testede forøvrigt også hvor min metode var lavet om til public void CreateExcelFile() hvor jeg havde lagt mine parametre ud som properties i den samme klasse men lige lidt hjalp det. Den batch fil jeg skal smide på serveren bliver bare ikke smidt, så jeg gav igår aftes.
Avatar billede karl-koder Nybegynder
19. marts 2008 - 17:15 #3
Så fik jeg testet dit forslag og der bliver stadigt ikke lagt nogle filer på serveren så de processer der skal køre startes ikke, nogen ideer ?
Avatar billede karl-koder Nybegynder
19. marts 2008 - 17:21 #4
Ok der var jeg en smule for hurtig den excel fil jeg laver bliver lagt på serveren, men den bliver kun oprettet, der bliver ikke efterfølgende skrevet noget i den, så det kan tyde på at der opstår en fejl efter at filen er lavet.
Avatar billede kalp Novice
19. marts 2008 - 19:28 #5
ja, men den fejl skal du så finde i den kode du har lavet som ikke er vidst hos mig.. jeg har fået udpluk af den.

sikre dig din streamwriter bliver lukket osv.
Avatar billede karl-koder Nybegynder
19. marts 2008 - 20:05 #6
Ja det er jeg med på men problemet er bare at jeg ikke får nogen fornuftig stack trace så det arbejder jeg lige på at få styr på.
Avatar billede kalp Novice
19. marts 2008 - 20:37 #7
yes, men du kan starte med at kalde .Close() på din SW'er.
Avatar billede karl-koder Nybegynder
19. marts 2008 - 20:51 #8
Der er skam .Close() på samtlige af mine sw'er så snart de ikke skal bruges mere ;o) Nu har jeg så bare ikke lige adgang til den server det hele skal ligge på lige nu ,men jeg skal nok lige melde tilbage når jeg får testet noget mere ;o)
Avatar billede karl-koder Nybegynder
15. august 2008 - 12:11 #9
Jeg har et par hænge partier jeg lige skal have rydet af vejen, denne er kommet til at fungere, så smid et svar så får du point ;o)
Avatar billede karl-koder Nybegynder
20. februar 2009 - 01:11 #10
lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester