Autor Beitrag
Raorkon
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 86
Erhaltene Danke: 1



BeitragVerfasst: Di 24.11.09 20:04 
Hallo zusammen,

ich habe mal wieder ein Prob an dem ich nicht weiter komme:

Ich habe eine mobile Anwendung die soll im Hintergrund einen Datensatz von einen Webservice holen.
Da aber die Anwendung auf dem Mobilen Gerät weiter arbeiten soll ist das ja der Klassische fall für Multithreading.

Nach Beenden einer Transaktion soll der Gesamte Datensatz dann wieder an den Webservice übergeben werden.
Da auch hier die Anwendung weiterarbeiten soll habe ich diesen Fall ebenfalls in einen Thread gesetzt.
Der erste und 2.Thread arbeiten niemals gleichzeitig.

Nun erhalte ich nach dem 2. Durchlauf die Meldung das nicht genügend Threads vorhanden sind. Nun habe ich mit

ThreadPool.SetMaxThreads den threadpool erhöht. Dadurch habe ich das Problem aber nur nach hinten verschoben da ich nun die Exception nach dem 5 oder 6 mal erhalte.

Leider weiß ich nicht mehr weiter vieleicht hat einer von euch ne Idee was ich falsch mache

1.Thread:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
#
// hier erstell ich den ersten Thread und rufe die Methode getMatIndexData auf

                ThreadPool.SetMaxThreads(20, 20);
                threadstart = new ThreadStart(getMatIndexData);
                thread = new Thread(threadstart);
                picBoxSync.Visible = true;
                thread.IsBackground = true;
                thread.Start();


ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
        
private void getMatIndexData()
        {
            webservice ws = new webservice();
            XmlNode xmlnode;

            try
            {
                if (index.Length > 0)
                {
                    xmlnode = ws.getMatIndexData(index);
                    ... // Rest ist wegen wahrung der übersichtlichkeit ausgeblendet

            }
            catch (Exception ex)
            {
                 //todo
            }
        }


hier ist der 2.thread den ich aufrufe:

ausblenden volle Höhe Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
    class automaticallySynchronisation
        {
        private ThreadStart t1;
        private Thread td1;

        public void Threadstart()
        {
            t1 = new ThreadStart(start);
            td1 = new Thread(t1);
            td1.IsBackground = true;
            td1.Start();            
        }

        private void start()
        {            
            StSysData syData = StSysData.Instance();
            
            try
            {
                //prüfen ob WS errreichbar
                CheckConnection MyTestping = new CheckConnection();
                if (MyTestping.Once(syData.WsConnectString) != false)
                {
                    WebRequest myRequest = WebRequest.Create(syData.WsConnectString);
                    WebResponse myResponse = myRequest.GetResponse();
                    myResponse.Close();

                    webservice ws = new webservice();
                    
                    if (!ws.checkClientWorking(syData.SystemGuid))
                    {
                        .....
                    }
                }              
            }
            catch (Exception ex)
            {
               // stbRelocate.Text = Strings.WARN_NO_CONNECTION;
                return;
            }
        }

        }