|
web
newsgroups
|
|||||||||||||||||||||||
|
|||||||||||||||||||||||
Problem With DoEventsquestion with some mark up code first. I'm having a problem terminating my process while using DoEvents. For example: Button.text = start If button.text = start then button.text = stop msgbox "Boo!" doevent while 1=1 msgbox "BooHoo!" loop else if button.text = stop button.text = start msgbox "Quit Your Whining" end if Ok, click the button and you get: Boo! BooHoo! BooHoo! BooHoo! BooHoo! BooHoo! BooHoo! ....... Now click the stop button and you get Quit Your Whining BooHoo! That doesn't make sense. The button already did NOT = Start. It was Stop which is why it ran the stop code. For some reason it goes through the DoEvents code one last time. How can I properly stop that DoEvents thread prior to running my STOP code? Thanks for any advise! Justin wrote:
<snip> Show quoteHide quote > I'm having a problem terminating my process while using DoEvents. For <snip>> example: > > Button.text = start > > If button.text = start then > button.text = stop > msgbox "Boo!" > doevent > while 1=1 > msgbox "BooHoo!" > loop > else if button.text = stop > button.text = start > msgbox "Quit Your Whining" > end if > Now click the stop button and you get <snip>> > Quit Your Whining > BooHoo! > > That doesn't make sense. The button already did NOT = Start. It was Stop > which is why it ran the stop code. > > For some reason it goes through the DoEvents code one last time. I don't think your markup translates the sequence of actions from your code very faithfully. For instance, the markup code only calls DoEvents once, and it seems you're expecting it to run several times. Maybe revising the markup or posting the actual code would provide a better view of the problem. Keep in mind, however, that DoEvents in VB.Net can be even more dangerous/unpredictable/undebuggable than in VB classic, cause VB.Net must account for many more things in the event processing cycle. For Example, launch a "DoEvents" from the meain thread when performing inter-thread UI updates and you may crash the application. There are other ways to accomplish what you (seem to) want, and DoEvents is way down in this list, if even there at all. HTH. Regards, Branco. Ok, here's the code. What I'm doing is setting up a connection to an RFID
Radio then going out to my SAP ERP system and obtaining pallet information. Then I loop through and compare the known pallet info with what is actualy being read on the physical pallet. The goal is to make sure what is on the pallet is what should be on the pallet. If not then the drivers needs to be able to see what is on the pallet that either shouldn't be or is not on there and should be. The images are the indicator to the driver as to what he/she should do. Private Sub btnExecute_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles btnExecute.Click Dim tags() As TagInfo Dim i As Short Dim bParseResult As Boolean Dim SAPArray As New ArrayList() Dim SAPArrayDone As Boolean Dim PalletLabel As Boolean Dim TagCheck As Boolean Dim dsTagsFound As New DataSet Dim dtTagsFound As New DataTable Dim drTagsFound As DataRow Dim Foreign As Boolean dtTagsFound.Columns.Add(New DataColumn("TagID", GetType(String))) dtTagsFound.Columns.Add(New DataColumn("Count", GetType(String))) dtTagsFound.Columns.Add(New DataColumn("Serial", GetType(String))) dtTagsFound.Columns.Add(New DataColumn("TagFound", GetType(String))) dsTagsFound.Tables.Add(dtTagsFound) If btnExecute.Text = "Start" Then mbAuto = True ' Flash HALF the lights to let the operator know his action did something. pbTrafficLight.Image = Image.FromFile("Images\light_red.png") Me.Refresh() System.Threading.Thread.Sleep(500) pbTrafficLight.Image = Image.FromFile("Images\light_yellow.png") Me.Refresh() System.Threading.Thread.Sleep(500) While mbAuto = True 'Get tags from reader If Reader.IsConnected Then ' Once everything is OK then continue with the green light and turn it off If btnExecute.Text = "Start" Then pbTrafficLight.Image = Image.FromFile("Images\light_green.png") Me.Refresh() System.Threading.Thread.Sleep(500) pbTrafficLight.Image = Image.FromFile("Images\light_off.png") Me.Refresh() End If btnExecute.Text = "Stop" msTagList = Reader.TagList Else mbAuto = False ' Connection failed so flash the red light three times pbTrafficLight.Image = Image.FromFile("Images\light_red.png") Me.Refresh() System.Threading.Thread.Sleep(500) pbTrafficLight.Image = Image.FromFile("Images\light_off.png") Me.Refresh() System.Threading.Thread.Sleep(500) pbTrafficLight.Image = Image.FromFile("Images\light_red.png") Me.Refresh() System.Threading.Thread.Sleep(500) pbTrafficLight.Image = Image.FromFile("Images\light_off.png") Me.Refresh() System.Threading.Thread.Sleep(500) pbTrafficLight.Image = Image.FromFile("Images\light_red.png") Me.Refresh() End If **********everything after this line runs ONE MORE time when I click my stop button. System.Windows.Forms.Application.DoEvents() 'Parse tag data and dump into grid On Error GoTo errHandler 'This is how many tags the reader currently sees, so if true then do work. bParseResult = AlienUtils.ParseTagList(msTagList, tags) If (bParseResult) Then For i = 0 To UBound(tags) If Mid(tags(i).TagID, 1, 2) = "31" Then PalletLabel = True pbTrafficLight.Image = Image.FromFile("Images\light_Yellow.png") ' Here I'm going to jump out to SAP and grab the serial numbers I need. ' I'm going to dump them into an array or dataset. So I'm only going to ' Do this is that resulting array or dataset is empty. If SAPArrayDone = False Then SAPArray.Clear() Dim Packitems As ZDEL_PACKITEMS Dim Pallet As ZDEL_PALLET Dim tblPackitems As New ZDEL_PACKITEMSTable Dim tblPallet As New ZDEL_PALLETTable Dim rfc As BAPIZRFID_DETAILS.BAPIZRFID_DETAILS = New BAPIZRFID_DETAILS.BAPIZRFID_DETAILS rfc.Connection = SAP.Connector.SAPConnection.GetNewConnection("ASHOST=169.254.2.200 SYSNR=00 CLIENT=300 USER=LINK PASSWD=access") rfc.Zrfid_Details("00" & GetSSCCCheckDigit("10090159" & GetTagInfo(tags(i).TagID)(5)), tblPackitems, tblPallet) For Each Packitems In tblPackitems SAPArray.Add(Mid(Packitems.Exidv, 13, 7)) Next For Each Pallet In tblPallet SAPArray.Add(RemoveLeadingZeros(Mid(Pallet.Exidv, 11, 9))) Next SAPArray.Sort() SAPArrayDone = True End If End If If PalletLabel = True Then ' Here I loop through the columns, find one to sort and set column widths Dim theColumn As DataGridViewColumn For Each theColumn In Me.gvTagsFound.Columns If theColumn.HeaderText = "TagID" Then gvTagsFound.Columns("TagID").Width = 175 ElseIf theColumn.HeaderText = "Count" Then gvTagsFound.Columns("Count").Width = 40 ElseIf theColumn.HeaderText = "Serial" Then gvTagsFound.Columns("Serial").Width = 75 ElseIf theColumn.HeaderText = "TagFound" Then gvTagsFound.Sort(theColumn, System.ComponentModel.ListSortDirection.Ascending) End If Next gvTagsFound.DataSource = dtTagsFound gvTagsFound.Columns("TagFound").Visible = False TagCheck = False For Each dr As DataRow In dsTagsFound.Tables(0).Rows If dr("TagID") = tags(i).TagID Then TagCheck = True dr("Count") = dr("Count") + tags(i).ReadCount dsTagsFound.Tables(0).AcceptChanges() End If Next If Not TagCheck Then drTagsFound = dtTagsFound.NewRow() drTagsFound("TagID") = tags(i).TagID drTagsFound("Count") = tags(i).ReadCount drTagsFound("Serial") = RemoveLeadingZeros(CStr(GetTagInfo(tags(i).TagID)(5))) ' Here I perform a search on the SAP ArrayList (SAPArray) and when I ' find a match between the array and the dataset I mark the field ' as found Dim index As Integer = SAPArray.BinarySearch(RemoveLeadingZeros(CStr(GetTagInfo(tags(i).TagID)(5))), New CaseInsensitiveComparer()) If index < 0 Then drTagsFound("TagFound") = "0" Else drTagsFound("TagFound") = "1" SAPArray.RemoveAt(index) End If ' At the end of the gridview is a blank record. ' This kills that blank record Dim cm As CurrencyManager = BindingContext(gvTagsFound.DataSource, gvTagsFound.DataMember) Dim dv As DataView = cm.List dv.AllowNew = False dtTagsFound.Rows.Add(drTagsFound) End If End If Next ' Here I lookp through all the rows and set the GRIDVIEW row color ' I'd rather set this color in the gridview above as I insert the rows??? ' Then I set the Foreign variable approprietly for green light determination Dim theRow As DataGridViewRow For Each theRow In gvTagsFound.Rows If theRow.Cells(3).Value = "0" Then theRow.DefaultCellStyle.BackColor = Color.Red Foreign = True End If Next lbTagsNotFound.DataSource = Nothing lbTagsNotFound.DataSource = SAPArray *******When I click my stop button I change this image. However this code is firing one more time to change it back to either green or red. ' Here we need to see if we've found enough tags to give a green light. Later, this will be a percentage If lbTagsNotFound.Items.Count < 2 And PalletLabel = True And Foreign = False Then pbTrafficLight.Image = Image.FromFile("Images\light_green.png") ElseIf Foreign = True Then pbTrafficLight.Image = Image.FromFile("Images\light_red.png") End If Else 'Blow everthing out PalletLabel = False gvTagsFound.DataSource = Nothing dsTagsFound.Clear() dtTagsFound.Clear() SAPArray.Clear() lbTagsNotFound.DataSource = Nothing SAPArrayDone = False pbTrafficLight.Image = Image.FromFile("Images\light_off.png") Foreign = False End If End While ElseIf btnExecute.Text = "Stop" Then btnExecute.Text = "Start" mbAuto = False pbTrafficLight.Image = Image.FromFile("Images\light_off.png") ' Need to add visual labels that will need to be reset here. End If Exit Sub The problem is, when I click STOP it changes the image but then it goes through the above code one more time and resets the image whatever it was set to before. I marked the code above that is the offending code that changes the image back to something else. However placing a msgbox anywhere after the DoEvents line fires that msgbox when my stop button is clicked. That and that alone is my reasoning for the DoEvents being at fault. When the button is clicked while the caption is 'Start', you enter a loop
that is only terminated when mbAuto is reset and, even then, only at the beginning of an itteration of the loop. When the button is clicked while the caption is 'Stop', you reset mbAuto, but the current iteration of the loop (see above) must fully complete before the loop can terminate. The results you observe will vary depending on how far the current iteration of the loop is through the logic when mbAuto is reset. Show quoteHide quote "Justin" <Justin@NoSpam.com> wrote in message news:OPXA8VSKHHA.960@TK2MSFTNGP04.phx.gbl... > Ok, here's the code. What I'm doing is setting up a connection to an RFID > Radio then going out to my SAP ERP system and obtaining pallet > information. Then I loop through and compare the known pallet info with > what is actualy being read on the physical pallet. The goal is to make > sure what is on the pallet is what should be on the pallet. If not then > the drivers needs to be able to see what is on the pallet that either > shouldn't be or is not on there and should be. > > The images are the indicator to the driver as to what he/she should do. > > Private Sub btnExecute_Click(ByVal eventSender As System.Object, ByVal > eventArgs As System.EventArgs) Handles btnExecute.Click > > Dim tags() As TagInfo > Dim i As Short > Dim bParseResult As Boolean > Dim SAPArray As New ArrayList() > Dim SAPArrayDone As Boolean > Dim PalletLabel As Boolean > Dim TagCheck As Boolean > Dim dsTagsFound As New DataSet > Dim dtTagsFound As New DataTable > Dim drTagsFound As DataRow > Dim Foreign As Boolean > dtTagsFound.Columns.Add(New DataColumn("TagID", GetType(String))) > dtTagsFound.Columns.Add(New DataColumn("Count", GetType(String))) > dtTagsFound.Columns.Add(New DataColumn("Serial", GetType(String))) > dtTagsFound.Columns.Add(New DataColumn("TagFound", > GetType(String))) > dsTagsFound.Tables.Add(dtTagsFound) > > If btnExecute.Text = "Start" Then > > mbAuto = True > > ' Flash HALF the lights to let the operator know his action did > something. > pbTrafficLight.Image = Image.FromFile("Images\light_red.png") > Me.Refresh() > System.Threading.Thread.Sleep(500) > pbTrafficLight.Image = > Image.FromFile("Images\light_yellow.png") > Me.Refresh() > System.Threading.Thread.Sleep(500) > > While mbAuto = True > > 'Get tags from reader > If Reader.IsConnected Then > > ' Once everything is OK then continue with the green > light and turn it off > If btnExecute.Text = "Start" Then > pbTrafficLight.Image = > Image.FromFile("Images\light_green.png") > Me.Refresh() > System.Threading.Thread.Sleep(500) > pbTrafficLight.Image = > Image.FromFile("Images\light_off.png") > Me.Refresh() > End If > > btnExecute.Text = "Stop" > msTagList = Reader.TagList > > Else > mbAuto = False > > ' Connection failed so flash the red light three times > pbTrafficLight.Image = > Image.FromFile("Images\light_red.png") > Me.Refresh() > System.Threading.Thread.Sleep(500) > pbTrafficLight.Image = > Image.FromFile("Images\light_off.png") > Me.Refresh() > System.Threading.Thread.Sleep(500) > pbTrafficLight.Image = > Image.FromFile("Images\light_red.png") > Me.Refresh() > System.Threading.Thread.Sleep(500) > pbTrafficLight.Image = > Image.FromFile("Images\light_off.png") > Me.Refresh() > System.Threading.Thread.Sleep(500) > pbTrafficLight.Image = > Image.FromFile("Images\light_red.png") > Me.Refresh() > End If > > > **********everything after this line runs ONE MORE time when I click my > stop button. > > > System.Windows.Forms.Application.DoEvents() > > 'Parse tag data and dump into grid > On Error GoTo errHandler > > 'This is how many tags the reader currently sees, so if > true then do work. > bParseResult = AlienUtils.ParseTagList(msTagList, tags) > If (bParseResult) Then > > For i = 0 To UBound(tags) > > If Mid(tags(i).TagID, 1, 2) = "31" Then > PalletLabel = True > pbTrafficLight.Image = > Image.FromFile("Images\light_Yellow.png") > > > ' Here I'm going to jump out to SAP and grab > the serial numbers I need. > ' I'm going to dump them into an array or > dataset. So I'm only going to > ' Do this is that resulting array or dataset is > empty. > If SAPArrayDone = False Then > SAPArray.Clear() > > Dim Packitems As ZDEL_PACKITEMS > Dim Pallet As ZDEL_PALLET > > Dim tblPackitems As New ZDEL_PACKITEMSTable > Dim tblPallet As New ZDEL_PALLETTable > > Dim rfc As > BAPIZRFID_DETAILS.BAPIZRFID_DETAILS = New > BAPIZRFID_DETAILS.BAPIZRFID_DETAILS > rfc.Connection = > SAP.Connector.SAPConnection.GetNewConnection("ASHOST=169.254.2.200 > SYSNR=00 CLIENT=300 USER=LINK PASSWD=access") > rfc.Zrfid_Details("00" & > GetSSCCCheckDigit("10090159" & GetTagInfo(tags(i).TagID)(5)), > tblPackitems, tblPallet) > > For Each Packitems In tblPackitems > SAPArray.Add(Mid(Packitems.Exidv, 13, > 7)) > Next > > For Each Pallet In tblPallet > > SAPArray.Add(RemoveLeadingZeros(Mid(Pallet.Exidv, 11, 9))) > Next > > SAPArray.Sort() > SAPArrayDone = True > > > End If > End If > > If PalletLabel = True Then > > ' Here I loop through the columns, find one to > sort and set column widths > Dim theColumn As DataGridViewColumn > For Each theColumn In Me.gvTagsFound.Columns > If theColumn.HeaderText = "TagID" Then > gvTagsFound.Columns("TagID").Width = > 175 > ElseIf theColumn.HeaderText = "Count" Then > gvTagsFound.Columns("Count").Width = 40 > ElseIf theColumn.HeaderText = "Serial" Then > gvTagsFound.Columns("Serial").Width = > 75 > ElseIf theColumn.HeaderText = "TagFound" > Then > gvTagsFound.Sort(theColumn, > System.ComponentModel.ListSortDirection.Ascending) > End If > Next > > gvTagsFound.DataSource = dtTagsFound > gvTagsFound.Columns("TagFound").Visible = False > > TagCheck = False > > For Each dr As DataRow In > dsTagsFound.Tables(0).Rows > If dr("TagID") = tags(i).TagID Then > TagCheck = True > dr("Count") = dr("Count") + > tags(i).ReadCount > dsTagsFound.Tables(0).AcceptChanges() > End If > Next > > If Not TagCheck Then > drTagsFound = dtTagsFound.NewRow() > drTagsFound("TagID") = tags(i).TagID > drTagsFound("Count") = tags(i).ReadCount > drTagsFound("Serial") = > RemoveLeadingZeros(CStr(GetTagInfo(tags(i).TagID)(5))) > > ' Here I perform a search on the SAP > ArrayList (SAPArray) and when I > ' find a match between the array and the > dataset I mark the field > ' as found > > Dim index As Integer = > SAPArray.BinarySearch(RemoveLeadingZeros(CStr(GetTagInfo(tags(i).TagID)(5))), > New CaseInsensitiveComparer()) > > If index < 0 Then > drTagsFound("TagFound") = "0" > Else > drTagsFound("TagFound") = "1" > SAPArray.RemoveAt(index) > End If > > ' At the end of the gridview is a blank > record. > ' This kills that blank record > Dim cm As CurrencyManager = > BindingContext(gvTagsFound.DataSource, gvTagsFound.DataMember) > Dim dv As DataView = cm.List > dv.AllowNew = False > > dtTagsFound.Rows.Add(drTagsFound) > End If > > End If > > Next > > ' Here I lookp through all the rows and set the > GRIDVIEW row color > ' I'd rather set this color in the gridview above as I > insert the rows??? > ' Then I set the Foreign variable approprietly for > green light determination > Dim theRow As DataGridViewRow > > For Each theRow In gvTagsFound.Rows > If theRow.Cells(3).Value = "0" Then > theRow.DefaultCellStyle.BackColor = Color.Red > Foreign = True > End If > Next > > lbTagsNotFound.DataSource = Nothing > lbTagsNotFound.DataSource = SAPArray > > > > *******When I click my stop button I change this image. However this code > is firing one more time to change it back to either green or red. > > > ' Here we need to see if we've found enough tags to > give a green light. Later, this will be a percentage > If lbTagsNotFound.Items.Count < 2 And PalletLabel = > True And Foreign = False Then > pbTrafficLight.Image = > Image.FromFile("Images\light_green.png") > ElseIf Foreign = True Then > pbTrafficLight.Image = > Image.FromFile("Images\light_red.png") > End If > > > Else > 'Blow everthing out > PalletLabel = False > gvTagsFound.DataSource = Nothing > dsTagsFound.Clear() > dtTagsFound.Clear() > SAPArray.Clear() > lbTagsNotFound.DataSource = Nothing > SAPArrayDone = False > pbTrafficLight.Image = > Image.FromFile("Images\light_off.png") > Foreign = False > End If > > End While > > ElseIf btnExecute.Text = "Stop" Then > btnExecute.Text = "Start" > mbAuto = False > pbTrafficLight.Image = Image.FromFile("Images\light_off.png") > ' Need to add visual labels that will need to be reset here. > End If > > Exit Sub > > > The problem is, when I click STOP it changes the image but then it goes > through the above code one more time and resets the image whatever it was > set to before. I marked the code above that is the offending code that > changes the image back to something else. However placing a msgbox > anywhere after the DoEvents line fires that msgbox when my stop button is > clicked. That and that alone is my reasoning for the DoEvents being at > fault. > Justin wrote:
> Ok, here's the code. What I'm doing is setting up a connection to an RFID <snip of very logn code>> Radio then going out to my SAP ERP system and obtaining pallet information. > Then I loop through and compare the known pallet info with what is actualy > being read on the physical pallet. The goal is to make sure what is on the > pallet is what should be on the pallet. If not then the drivers needs to be > able to see what is on the pallet that either shouldn't be or is not on > there and should be. > > The images are the indicator to the driver as to what he/she should do. > The problem is, when I click STOP it changes the image but then it goes Without going into the code merits (or lack of them =)), a superficial> through the above code one more time and resets the image whatever it was > set to before. I marked the code above that is the offending code that > changes the image back to something else. However placing a msgbox anywhere > after the DoEvents line fires that msgbox when my stop button is clicked. > That and that alone is my reasoning for the DoEvents being at fault. analisys of the execution flow reveals that, for the specific problem of the duplicating action, the location of DoEvents in your code is the culprit (I'm not going into other issues, by now). See, you call DoEvents just before executing the instructions that process the device's data. In practice this *inlines a call* to the click event (if the button was clicked, of course), which will set mbAuto to False. But then, after DoEvents returns, you *continue processing the remaining code*, as if nothing had happened. Just when it gets to the end of the loop is that you check mbAuto, but then an extra cicle was already performed. It would be something like this: Do While mbAuto If is conected then Set the label to "stop" <- this will happen repeatedly Loads the Reader's tags Else Disable mbAuto <- Oops, one more cicle will follow! End If DoEvents (or, actually something like this: If Button was clicked then Disable mbAuto Pretend we are finished End If ) Probe the device and load data Loop A *paliative* approach would be: set the label to "stop" Do While mbAuto If is conected then Read the Reader's tags Probe the device and load data DoEvents() <-- allows a click on "stop" Else Disable mbAuto End If Loop Personally, I'd encapsulate the light flashing and the actual cicles into a separate class with its full set of events, etc. HTH. Regards, Branco I took your first piece of advise and ditched the DoEvents. I'm setting it
up now where it finds a pallet label and starts a new thread. However with my first attempt (aside from updating form object issues, unsafe thread) when I went to kill the thread it AGAIN went through and ran the code in the thread one last time. I need to play with it more. Thanks to everyone and their input!!!!! Thanks, Justin Emlay System Administrator Maisto International, Inc. 909-357-7988 ext.360 909-357-9958 fax JEm***@Maisto.com www.maisto.com Show quoteHide quote "Branco Medeiros" <branco.medei***@gmail.com> wrote in message news:1167167167.759558.51250@h40g2000cwb.googlegroups.com... > Justin wrote: >> Ok, here's the code. What I'm doing is setting up a connection to an >> RFID >> Radio then going out to my SAP ERP system and obtaining pallet >> information. >> Then I loop through and compare the known pallet info with what is >> actualy >> being read on the physical pallet. The goal is to make sure what is on >> the >> pallet is what should be on the pallet. If not then the drivers needs to >> be >> able to see what is on the pallet that either shouldn't be or is not on >> there and should be. >> >> The images are the indicator to the driver as to what he/she should do. > > <snip of very logn code> > >> The problem is, when I click STOP it changes the image but then it goes >> through the above code one more time and resets the image whatever it was >> set to before. I marked the code above that is the offending code that >> changes the image back to something else. However placing a msgbox >> anywhere >> after the DoEvents line fires that msgbox when my stop button is clicked. >> That and that alone is my reasoning for the DoEvents being at fault. > > Without going into the code merits (or lack of them =)), a superficial > analisys of the execution flow reveals that, for the specific problem > of the duplicating action, the location of DoEvents in your code is the > culprit (I'm not going into other issues, by now). > > See, you call DoEvents just before executing the instructions that > process the device's data. In practice this *inlines a call* to the > click event (if the button was clicked, of course), which will set > mbAuto to False. But then, after DoEvents returns, you *continue > processing the remaining code*, as if nothing had happened. Just when > it gets to the end of the loop is that you check mbAuto, but then an > extra cicle was already performed. > > It would be something like this: > > Do While mbAuto > If is conected then > Set the label to "stop" <- this will happen repeatedly > Loads the Reader's tags > Else > Disable mbAuto <- Oops, one more cicle will follow! > End If > > DoEvents > (or, actually something like this: > If Button was clicked then > Disable mbAuto > Pretend we are finished > End If > ) > > Probe the device and load data > > Loop > > A *paliative* approach would be: > > set the label to "stop" > Do While mbAuto > If is conected then > Read the Reader's tags > Probe the device and load data > DoEvents() <-- allows a click on "stop" > Else > Disable mbAuto > End If > Loop > > Personally, I'd encapsulate the light flashing and the actual cicles > into a separate class with its full set of events, etc. > > HTH. > > Regards, > > Branco >
Show quote
Hide quote
"Branco Medeiros" <branco.medei***@gmail.com> wrote in message Has he ever heard of subroutines? I hope so if he is working on ERPnews:1167167167.759558.51250@h40g2000cwb.googlegroups.com... > Justin wrote: >> Ok, here's the code. What I'm doing is setting up a connection to an >> RFID >> Radio then going out to my SAP ERP system and obtaining pallet >> information. >> Then I loop through and compare the known pallet info with what is >> actualy >> being read on the physical pallet. The goal is to make sure what is on >> the >> pallet is what should be on the pallet. If not then the drivers needs to >> be >> able to see what is on the pallet that either shouldn't be or is not on >> there and should be. >> >> The images are the indicator to the driver as to what he/she should do. > > <snip of very logn code> > >> The problem is, when I click STOP it changes the image but then it goes >> through the above code one more time and resets the image whatever it was >> set to before. I marked the code above that is the offending code that >> changes the image back to something else. However placing a msgbox >> anywhere >> after the DoEvents line fires that msgbox when my stop button is clicked. >> That and that alone is my reasoning for the DoEvents being at fault. > > Without going into the code merits (or lack of them =)), a superficial > analisys of the execution flow reveals that, for the specific problem > of the duplicating action, the location of DoEvents in your code is the > culprit (I'm not going into other issues, by now). stuff.. I only subroutine things that would otherwise cause duplicate code. If you
look through the code again you will find many functions that otherwise don't exist to dotnet. So by my code alone, the answer to your question is yes. Thanks, Justin Emlay System Administrator Maisto International, Inc. 909-357-7988 ext.360 909-357-9958 fax JEm***@Maisto.com www.maisto.com Show quoteHide quote "Robert" <no@spam.com> wrote in message news:e6$seFmKHHA.2140@TK2MSFTNGP03.phx.gbl... > > "Branco Medeiros" <branco.medei***@gmail.com> wrote in message > news:1167167167.759558.51250@h40g2000cwb.googlegroups.com... >> Justin wrote: >>> Ok, here's the code. What I'm doing is setting up a connection to an >>> RFID >>> Radio then going out to my SAP ERP system and obtaining pallet >>> information. >>> Then I loop through and compare the known pallet info with what is >>> actualy >>> being read on the physical pallet. The goal is to make sure what is on >>> the >>> pallet is what should be on the pallet. If not then the drivers needs >>> to be >>> able to see what is on the pallet that either shouldn't be or is not on >>> there and should be. >>> >>> The images are the indicator to the driver as to what he/she should do. >> >> <snip of very logn code> >> >>> The problem is, when I click STOP it changes the image but then it goes >>> through the above code one more time and resets the image whatever it >>> was >>> set to before. I marked the code above that is the offending code that >>> changes the image back to something else. However placing a msgbox >>> anywhere >>> after the DoEvents line fires that msgbox when my stop button is >>> clicked. >>> That and that alone is my reasoning for the DoEvents being at fault. >> >> Without going into the code merits (or lack of them =)), a superficial >> analisys of the execution flow reveals that, for the specific problem >> of the duplicating action, the location of DoEvents in your code is the >> culprit (I'm not going into other issues, by now). > > > Has he ever heard of subroutines? I hope so if he is working on ERP > stuff.. > Justin,
Just look at threading.Thread.sleep(milliseconds) than the rest will obviously be clear to you. http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemthreadingthreadclasssleeptopic.asp I hope this helps, Cor Show quoteHide quote "Justin" <Justin@NoSpam.com> schreef in bericht news:eD5MyoRKHHA.1252@TK2MSFTNGP02.phx.gbl... >I can attach my code if anyone wants to see it however I'll try to ask my >question with some mark up code first. > > I'm having a problem terminating my process while using DoEvents. For > example: > > Button.text = start > > If button.text = start then > button.text = stop > msgbox "Boo!" > doevent > while 1=1 > msgbox "BooHoo!" > loop > else if button.text = stop > button.text = start > msgbox "Quit Your Whining" > end if > > > Ok, click the button and you get: > Boo! > BooHoo! > BooHoo! > BooHoo! > BooHoo! > BooHoo! > BooHoo! > ...... > > Now click the stop button and you get > > Quit Your Whining > BooHoo! > > That doesn't make sense. The button already did NOT = Start. It was Stop > which is why it ran the stop code. > > For some reason it goes through the DoEvents code one last time. > > How can I properly stop that DoEvents thread prior to running my STOP > code? > > Thanks for any advise! > Were you wanting me to sleep before I run my stop code? That doesn't work.
It sleeps, runs my stop code then again, runs through everything after DoEvents one more time. Thanks, Justin Emlay System Administrator Maisto International, Inc. 909-357-7988 ext.360 909-357-9958 fax JEm***@Maisto.com www.maisto.com Show quoteHide quote "Cor Ligthert [MVP]" <notmyfirstn***@planet.nl> wrote in message news:OQZVT7RKHHA.4928@TK2MSFTNGP06.phx.gbl... > Justin, > > Just look at threading.Thread.sleep(milliseconds) than the rest will > obviously be clear to you. > > http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemthreadingthreadclasssleeptopic.asp > > I hope this helps, > > Cor > > "Justin" <Justin@NoSpam.com> schreef in bericht > news:eD5MyoRKHHA.1252@TK2MSFTNGP02.phx.gbl... >>I can attach my code if anyone wants to see it however I'll try to ask my >>question with some mark up code first. >> >> I'm having a problem terminating my process while using DoEvents. For >> example: >> >> Button.text = start >> >> If button.text = start then >> button.text = stop >> msgbox "Boo!" >> doevent >> while 1=1 >> msgbox "BooHoo!" >> loop >> else if button.text = stop >> button.text = start >> msgbox "Quit Your Whining" >> end if >> >> >> Ok, click the button and you get: >> Boo! >> BooHoo! >> BooHoo! >> BooHoo! >> BooHoo! >> BooHoo! >> BooHoo! >> ...... >> >> Now click the stop button and you get >> >> Quit Your Whining >> BooHoo! >> >> That doesn't make sense. The button already did NOT = Start. It was >> Stop >> which is why it ran the stop code. >> >> For some reason it goes through the DoEvents code one last time. >> >> How can I properly stop that DoEvents thread prior to running my STOP >> code? >> >> Thanks for any advise! >> > > Justin,
For my answer see the message from Tom. Cor Show quoteHide quote "Justin" <Justin@NoSpam.com> schreef in bericht news:eP1mJXSKHHA.3552@TK2MSFTNGP03.phx.gbl... > Were you wanting me to sleep before I run my stop code? That doesn't > work. It sleeps, runs my stop code then again, runs through everything > after DoEvents one more time. > > > > Thanks, Justin Emlay System Administrator Maisto International, Inc. > 909-357-7988 ext.360 909-357-9958 fax JEm***@Maisto.com www.maisto.com > "Cor Ligthert [MVP]" <notmyfirstn***@planet.nl> wrote in message > news:OQZVT7RKHHA.4928@TK2MSFTNGP06.phx.gbl... >> Justin, >> >> Just look at threading.Thread.sleep(milliseconds) than the rest will >> obviously be clear to you. >> >> http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemthreadingthreadclasssleeptopic.asp >> >> I hope this helps, >> >> Cor >> >> "Justin" <Justin@NoSpam.com> schreef in bericht >> news:eD5MyoRKHHA.1252@TK2MSFTNGP02.phx.gbl... >>>I can attach my code if anyone wants to see it however I'll try to ask my >>>question with some mark up code first. >>> >>> I'm having a problem terminating my process while using DoEvents. For >>> example: >>> >>> Button.text = start >>> >>> If button.text = start then >>> button.text = stop >>> msgbox "Boo!" >>> doevent >>> while 1=1 >>> msgbox "BooHoo!" >>> loop >>> else if button.text = stop >>> button.text = start >>> msgbox "Quit Your Whining" >>> end if >>> >>> >>> Ok, click the button and you get: >>> Boo! >>> BooHoo! >>> BooHoo! >>> BooHoo! >>> BooHoo! >>> BooHoo! >>> BooHoo! >>> ...... >>> >>> Now click the stop button and you get >>> >>> Quit Your Whining >>> BooHoo! >>> >>> That doesn't make sense. The button already did NOT = Start. It was >>> Stop >>> which is why it ran the stop code. >>> >>> For some reason it goes through the DoEvents code one last time. >>> >>> How can I properly stop that DoEvents thread prior to running my STOP >>> code? >>> >>> Thanks for any advise! >>> >> >> > > Before you get more confused... (this has (as far as I can see) nothing to
do with threading) As was pointed out your pseudocode isn't likely the same as the code you wrote. But your question also indicates there is a misunderstanding since you write "it goes through the DoEvents code one more time". There is no "DoEvents code" there is simply a call to DoEvents which gives the O/S a chance to process low-priority events that are not getting processed. Also try to avoid constructs like: while 1 = 1. It is an uncontrollable condition which is a) poor form and b) overly complex since 1 = 1 is equal to True why not just loop while True? But again don't do that just give it an honest condition to test for. I think you would be better off posting 1) a description of what you are attempting and 2) the actual code (reduced to the essentials if it is particularly long.) Perhaps even 3) why you doing this since it is going to be very annoying when it's running :-) Tom Show quoteHide quote "Justin" <Justin@NoSpam.com> wrote in message news:eD5MyoRKHHA.1252@TK2MSFTNGP02.phx.gbl... >I can attach my code if anyone wants to see it however I'll try to ask my >question with some mark up code first. > > I'm having a problem terminating my process while using DoEvents. For > example: > > Button.text = start > > If button.text = start then > button.text = stop > msgbox "Boo!" > doevent > while 1=1 > msgbox "BooHoo!" > loop > else if button.text = stop > button.text = start > msgbox "Quit Your Whining" > end if > > > Ok, click the button and you get: > Boo! > BooHoo! > BooHoo! > BooHoo! > BooHoo! > BooHoo! > BooHoo! > ...... > > Now click the stop button and you get > > Quit Your Whining > BooHoo! > > That doesn't make sense. The button already did NOT = Start. It was Stop > which is why it ran the stop code. > > For some reason it goes through the DoEvents code one last time. > > How can I properly stop that DoEvents thread prior to running my STOP > code? > > Thanks for any advise! > By "DoEvents code" I meant that it runs through all code after the DoEvent
call "one more time". By showing 1=1 I was sparing everyone the lengthy details of the project. There is more reasonable code being used. As for 1, 2 and 3 I've already done that in a reply to Branco. Thanks, Justin Emlay System Administrator Maisto International, Inc. 909-357-7988 ext.360 909-357-9958 fax JEm***@Maisto.com www.maisto.com Show quoteHide quote "Tom Leylan" <tleylan@nospam.net> wrote in message news:On1bkQSKHHA.3488@TK2MSFTNGP02.phx.gbl... > Before you get more confused... (this has (as far as I can see) nothing to > do with threading) > > As was pointed out your pseudocode isn't likely the same as the code you > wrote. But your question also indicates there is a misunderstanding since > you write "it goes through the DoEvents code one more time". There is no > "DoEvents code" there is simply a call to DoEvents which gives the O/S a > chance to process low-priority events that are not getting processed. > > Also try to avoid constructs like: while 1 = 1. It is an uncontrollable > condition which is a) poor form and b) overly complex since 1 = 1 is equal > to True why not just loop while True? But again don't do that just give > it an honest condition to test for. > > I think you would be better off posting 1) a description of what you are > attempting and 2) the actual code (reduced to the essentials if it is > particularly long.) Perhaps even 3) why you doing this since it is going > to be very annoying when it's running :-) > > Tom > > > "Justin" <Justin@NoSpam.com> wrote in message > news:eD5MyoRKHHA.1252@TK2MSFTNGP02.phx.gbl... >>I can attach my code if anyone wants to see it however I'll try to ask my >>question with some mark up code first. >> >> I'm having a problem terminating my process while using DoEvents. For >> example: >> >> Button.text = start >> >> If button.text = start then >> button.text = stop >> msgbox "Boo!" >> doevent >> while 1=1 >> msgbox "BooHoo!" >> loop >> else if button.text = stop >> button.text = start >> msgbox "Quit Your Whining" >> end if >> >> >> Ok, click the button and you get: >> Boo! >> BooHoo! >> BooHoo! >> BooHoo! >> BooHoo! >> BooHoo! >> BooHoo! >> ...... >> >> Now click the stop button and you get >> >> Quit Your Whining >> BooHoo! >> >> That doesn't make sense. The button already did NOT = Start. It was >> Stop >> which is why it ran the stop code. >> >> For some reason it goes through the DoEvents code one last time. >> >> How can I properly stop that DoEvents thread prior to running my STOP >> code? >> >> Thanks for any advise! >> > >
ADO.NET Problem write or wrong
Launching Web site for help Cross: Access speed Small question? Why does this not work? What am I doing wrong? vbc : error BC30420: 'Sub Main' was not found in 'Product'. Is it necessary to close a local OleDbDataReader before exit function? VB Smart Devivce Programming Changing user interface DataGridView Questions |
|||||||||||||||||||||||