Ik ben net tegen een vreemd probleem opgelopen.
Ik heb in m'n C# programma een Thread object die een bepaalde functie uitvoert.
Die functie zag er ongeveer zo uit:
Deze code zou dus, zolang IsRunning op true staat, iedere keer de stream moeten gaan checken of er iets te lezen valt. Indien er niets te lezen is op de stream, dan moet hij een beetje slapen.
Nu had ik het probleem dat m'n thread blijkbaar ergens 'vastliep', of stond te wachten. Na enig zoek en debug-werk, vond ik dat het probleem hier lag:
Zolang er dus iets te lezen viel, moest m'n reader lezen, indien er niets op de stream te lezen is, dan zou ReadLine null moeten returnen volgens de .NET documentatie, en moet die lus dus beëindigd worden.
Dat was dus niet het geval. Blijkbaar 'hangt' of 'wacht' die ReadLine als er niets uit te lezen valt. M'n programma blokkeerde niet, maar m'n thread ging niet verder, m'n lus werd niet beëindigd, m'n cursor bleef tijdens het debuggen maar op die regel staan.
Ik heb die regel toen veranderd naar:
(Peek kijkt of er nog iets te lezen valt, en indien dit niet het geval is, returned die functie -1).
En toen was het blijkbaar opgelost.
Iemand die ook al zoiets heeft meegemaakt of er een verklaring voor heeft? Of deed ik misschien toch nog iets fout?
Ik heb in m'n C# programma een Thread object die een bepaalde functie uitvoert.
Die functie zag er ongeveer zo uit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
| while (this.IsRunning)
{
while ( (inputLine = Reader.ReadLine()) != null )
{
// Do some stuff.
}
Thread.Sleep(500);
}
Reader.Close(); |
Deze code zou dus, zolang IsRunning op true staat, iedere keer de stream moeten gaan checken of er iets te lezen valt. Indien er niets te lezen is op de stream, dan moet hij een beetje slapen.
Nu had ik het probleem dat m'n thread blijkbaar ergens 'vastliep', of stond te wachten. Na enig zoek en debug-werk, vond ik dat het probleem hier lag:
code:
1
| while ( (inputLine = Reader.ReadLine() ) != null ) |
Zolang er dus iets te lezen viel, moest m'n reader lezen, indien er niets op de stream te lezen is, dan zou ReadLine null moeten returnen volgens de .NET documentatie, en moet die lus dus beëindigd worden.
Dat was dus niet het geval. Blijkbaar 'hangt' of 'wacht' die ReadLine als er niets uit te lezen valt. M'n programma blokkeerde niet, maar m'n thread ging niet verder, m'n lus werd niet beëindigd, m'n cursor bleef tijdens het debuggen maar op die regel staan.
Ik heb die regel toen veranderd naar:
code:
1
2
3
| while ( Reader.Peek() != - 1)
{
inputLine = Reader.ReadLine(); |
(Peek kijkt of er nog iets te lezen valt, en indien dit niet het geval is, returned die functie -1).
En toen was het blijkbaar opgelost.
Iemand die ook al zoiets heeft meegemaakt of er een verklaring voor heeft? Of deed ik misschien toch nog iets fout?
https://fgheysels.github.io/