VB.NET problem

Posted by: StigOE

VB.NET problem - 23/06/2007 07:32

Hi, all.

I have a problem with Visual Studio 2005 that I hope someone can help me with.

I have a Passat 2006 which I, of course, have installed my Empeg in. It also has a display in the dashboard where radio info and such shows up, and it's controlled with CAN messages. I'd like to get the info from the Empeg up there and since I haven't found much info on the Internet about addresses and protocols for doing that, I figured I would try to reverse-engineer the info from the radio. The problem is that the radio gives out some information and then expects some answers before it gives out more info. So I made a small program that would listen to the radio (the CAN messages, that is... :-) ) and answer it so that I could get some more info out of it and eventually, hopefully, be able to get the info to the display.

So, to my problem... I have managed to listen to the messages from the radio and print them out in a textbox, but I haven't been able to get timers to trigger. Can anyone help me with that? I have enclosed the source, but I have to warn you: I'm not a programmer...! So it's probably a lot of bad code and bad programming there. There's also left-over code from when I started to make it in VB6.

TIA,
Stig
Posted by: andy

Re: VB.NET problem - 23/06/2007 18:57

I'm finding it hard to follow the code, I more used to C# nowadays, but I think your timers are just never getting enabled.

The timers only ever seem to get enabled in Check, which only gets called by OnDataReceived, which would only get called if DataReceived was called, which will only get called if you successfully receive some data.

If I put this in the cmdConnect_Click code:

tmrOut439.Enabled = True

Then the timer fires successfully.
Posted by: StigOE

Re: VB.NET problem - 23/06/2007 20:19

Quote:
I'm finding it hard to follow the code <snip>

He he, I did warn you...

To me it also seems like the timers don't get enabled, and yes, they are only enabled in Check, but if I set a breakpoint in Check where the timers are (or should be...) enabled, it breaks there when I receive data. I have tried to google for answers and to me it looks like it should work, but still it doesn't... I also get a lot of warnings in the Immidiate Window about Invalidcast or something. I don't know if that could be some of the problem. I'll check them tomorrow to get the correct text...

Edit: Here's the error messages I get when I run the program.

A first chance exception of type 'System.InvalidCastException' occurred in Microsoft.VisualBasic.dll
A first chance exception of type 'System.InvalidOperationException' occurred in System.Windows.Forms.dll

There are several of each of them and I think they are from the build process.

Oh yes, another 'problem'. How can I get the textbox to stay at the last 'entry'? Now it jumps to the beginning of the text. Is this because the way I add text to the textbox, is by setting the text to be the old text & new text? Would it be better to use a richtextbox instead?

Stig
Posted by: Rufus

Re: VB.NET problem - 25/06/2007 09:51

Quote:
Oh yes, another 'problem'. How can I get the textbox to stay at the last 'entry'? Now it jumps to the beginning of the text. Is this because the way I add text to the textbox, is by setting the text to be the old text & new text? Would it be better to use a richtextbox instead?


If you update the text in the textbox using:

textbox1.selectedtext = "new text"

with this method there is no need set the textbox equal to what is already there + the new text.

then use:

textbox1.scrolltocaret()

this will leave the textbox displaying the last entry you added, you will also need vertical scrollbars enabled too.

Mark.
Posted by: StigOE

Re: VB.NET problem - 26/06/2007 07:22

Thanks, Mark. That worked.

And I found the problem with the error messages. They're not from the build process, but from when the data coming in isn't a full string, so it fails when I try to chop it up, and the Immidiate window isn't clearing for each time I run the program...

Now, for the timers, I put in a 'Console.write' line in the check routine, writing the interval and whether Enabled is true or false, and they're getting set. Could the problem be that since the Check routine is called from the 'data-received-from-serialport' routine, which is running in a different thread and the timers should be running in the GUI thread, be why they aren't firing?

Stig
Posted by: g_attrill

Re: VB.NET problem - 26/06/2007 08:22

I haven't used VB.NET much, but are the timer handlers actually linked to the timer object? Occasionally often in .NET projects I find the handlers get deleted or unlinked.
Posted by: andy

Re: VB.NET problem - 26/06/2007 13:22

Don't think it is a threading issue, that only really affects controls that have a user interface, I have used timers perfectly successfully in similar threaded cases (and the timer component doesn't have an Invoke method, which it would have if it was affected).
Posted by: StigOE

Re: VB.NET problem - 26/06/2007 13:40

g_attrill: I have absolutely no idea... But it works if I enable them in a button-click routine.

Andy: Ok, thanks. I'll try to modify the code some and see if I can get it working some other way...

Stig
Posted by: StigOE

Re: VB.NET problem - 26/06/2007 19:26

I managed to get the timers sort of working by setting a flag for the timers in the Check routine and then start another timer when I click the Connect button which fires every ms which in turn checks the flags and starts the other timers as needed... Now I just have to get some more data out of the radio and see if I can find out how to emulate the radio...

Stig