|
web
newsgroups
|
|||||||||||||||||||||||
|
|||||||||||||||||||||||
Pausing an application waiting for a thread to finish...and a DLL. The basic part of the code is below. I left out some of the initial parts and also the event handlers that occur when certain events happen while it's dialing(ie. OnCallConnected, OnDTMF_KeyDown (someone hits a key on the phone)). What I would like to do is call the dialer (w2cDrv.Device.[Call]) and wait for the call to complete and then possibly re-dial on certain occasions (ie some variable is True). The problem is, I don't know how to wait for the dialing to finish. The code below uses cki = Console.ReadKey(False) which basically has the console window wait for someone to hit a key in that window to redial. While it is waiting, it does not interrupt the dialing and interaction with the phone callee but just waits for a user to hit a key in the console. How can I wait for the call to finish without needing someone to actually hit a key in the console window without interfering with the call? Somehow I think threading but it's new to me...Also, I really plan on using a forms app instead of a console otherwise I have to worry about message pumping on top of this thread issue...but that's for another time... Thanks for any pointers you can give... Chris Code sample: reenternumber: 'User enters phone number to dial here and it get stored in variable "w". Left code out for simplicity 'then we call the device to dial here. This actually dials the number..... Dim xError As CWay2callDriver.Errors = DirectCast(w2cDrv.Device.[Call] ("w" + sNumber, True, True), CWay2callDriver.Errors) ' handle errors ... If xError <> CWay2callDriver.Errors.SUCCESS Then Console.ForegroundColor = ConsoleColor.Red Console.WriteLine("Call(..) Method returned error: " + xError.ToString() + " " & vbLf) Console.ForegroundColor = cc w2cDrv.Device.HangUp(False) MyHangUpCall = 0 MyCallConnected = 0 Console.WriteLine(sLogo) GoTo renternumber End If ' wait key press ... Console.WriteLine("Calling " + sNumber + ", Press any key to end, 'a' for another call." & vbLf) 'this is where it waits for user to hit key and this is where i would want to pause cki = Console.ReadKey(False) If cki.KeyChar = "a"c Then w2cDrv.Device.HangUp(False) MyHangUpCall = 0 MyCallConnected = 0 Console.Clear() Console.WriteLine(sLogo) GoTo renternumber End If mainend: iErr = w2cDrv.Device.Close(0) 'close the device ' handle errors ... iErr = w2cDrv.ShutdownDriver(0) 'must be last called ' handle errors ... Hello,
> I left out some of But w2cDrv.Device.[Call] seems to be a non blocking call else you wouldn't > and also the event handlers that occur when certain > events happen while it's dialing(ie. OnCallConnected, OnDTMF_KeyDown > (someone hits a key on the phone)). What I would like to do is call > the dialer (w2cDrv.Device.[Call]) and wait for the call to complete need Console.ReadKey to pause the application. So I don't see for now how threading could help (or do you inted to check the line status continuously in a background thread ?)... As you seems to have several events available, my first thought is that you should have an event such as OnCallDisconnected or something similar ? It seems more a product issue. Have you checked the SDK ? (tried but gave up as it needs a registration). Finally, I would suggest to immediately switch to a WinForm application as a Console app is not well suited to handling events and can be tricky... -- Patrice
Show quote
Hide quote
On Apr 14, 11:04 am, "Patrice" <http://scribe-en.blogspot.com/> wrote: I agree, I actually have a winform app written for this already but> Hello, > > > I left out some of > > and also the event handlers that occur when certain > > events happen while it's dialing(ie. OnCallConnected, OnDTMF_KeyDown > > (someone hits a key on the phone)). What I would like to do is call > > the dialer (w2cDrv.Device.[Call]) and wait for the call to complete > > But w2cDrv.Device.[Call] seems to be a non blocking call else you wouldn't > need Console.ReadKey to pause the application. So I don't see for now how > threading could help (or do you inted to check the line status continuously > in a background thread ?)... > > As you seems to have several events available, my first thought is that you > should have an event such as OnCallDisconnected or something similar ? It > seems more a product issue. Have you checked the SDK ? (tried but gave up as > it needs a registration). > > Finally, I would suggest to immediately switch to a WinForm application as a > Console app is not well suited to handling events and can be tricky... > -- > Patrice posted the console version instead because it is easier to explain the non blocking thing..... You are correct, there are events like OnCallDisconnect that fire. The issue is, I don't know how to resubmit the w2cDrv.Device.[Call] in the winform app once the OnCallDisconnect fires... Basically, when the disconnect happens and some variable is True, I want to redial immediately.... > You are correct, there are events like OnCallDisconnect that fire. To get something to start with what happens if you just put > The issue is, I don't know how to resubmit the w2cDrv.Device.[Call] > in the winform app once the OnCallDisconnect fires... > > Basically, when the disconnect happens and some variable is True, I > want to redial immediately.... w2cDrv.Device.Call in the OnCallDisconnect event handler ? For now I don't get what is the issue you have with just calling whatever you want when OnCallDisconnect fires. Or is it that you are new with event driven programming ? -- Patrice
Show quote
Hide quote
On Apr 15, 11:44 am, "Patrice" <http://scribe-en.blogspot.com/> wrote: Thanks Patrice...After I responded, I did what you said. I just had> > You are correct, there are events like OnCallDisconnect that fire. > > The issue is, I don't know how to resubmit the w2cDrv.Device.[Call] > > in the winform app once the OnCallDisconnect fires... > > > Basically, when the disconnect happens and some variable is True, I > > want to redial immediately.... > > To get something to start with what happens if you just put > w2cDrv.Device.Call in the OnCallDisconnect event handler ? > > For now I don't get what is the issue you have with just calling whatever > you want when OnCallDisconnect fires. Or is it that you are new with event > driven programming ? > > -- > Patrice a brain block...and, yes, I am somewhat new to event driven programming.... Thanks again... |
|||||||||||||||||||||||