C# - Common Programming Mistakes In .Net When Handling Exceptions?
May 21, 2010
What are some of the most common mistakes you've seen made when handling exceptions?It seems like exception handling can be one of the hardest things to learn how to do "right" in .Net. Especially considering the currently #1 ranked answer to Common programming mistakes for .NET developers to avoid? is related to exception handling.
All of us use the try catch blocks. But what is the best way of handling errors within custom functions?Display a messagebox to the user when the exception is thrown (if possible within the function), or return a value indicating that an error was found within the function?
I have set up a process to create new tasks to handle file processing. A problem arised where I received and unhandled exception error and just clicking on the continue button, the main process continued to run. Now I also found that within the child task I was having a file conflict error and as the tasks run as separate .exe i was under the impression that everything would have been thread safe. So for the first issue here is the task creation in the main process..GProcess is a complete project on its own consisting of 6 classes. This is added as a class library reference to the main process class form1
Public Class Form1 ..Private parser as GProcess.module = new GProcess.module() dim factory as new taskfactory
How does one handle unhandled exceptions in a DLL? VS doesn't give me the option to add Application Events, I'm guessing because it's a DLL. Do I just have to do it in the main app?
This was a difficult question to google. I have an Order class with a couple of dozen properties such as ClientReference, ShipMethod, etc. I use databinding to bind this class to an Order form. If a user enters an invalid shipping method, an exception is raised in the ShipMethod property and a validation error is displayed to the user. But I'm trying to use the same Order class within an OrderImport class whose job it is to take a flat file and create multiple orders. The problem occurs if I'm assigning to a dozen of the order fields consecutively, and say the first one causes a validation exception. If I have all dozen assignments occuring within a single try-catch block, the next 11 assignments will be skipped and I'll only be able to record one validation error. I could solve the problem by doing a dozen separate try-catch statements, but that doesn't seem very elegant.
When two computers are connected through TCP, and one of them closes and breaks the connection, it throws error 10054 "Remote host forcibly closed the connection".I want to handle this error because I know it will happen more often than not with the application I'm building. In System.Net.Sockets.SocketException, there is an on the error code. But when I run the program, the exception that is being thrown is System.IO.IOException, and the GetType for IOException is the socket exception. I don't know how to handle the socket exception if it's not the root cause of the exception.
Here is the code for my Try Catch block: For infiniteCounter = 1 To 2 infiniteCounter = 1
If any directory within a set being searched by the [URL] or [URL] methods contains a junction point, the entire method fails and returns zero results on my tests under VB 2008. I would like to make the call more robust: to return the folders or files not blocked by access restrictions and to note the folders which were blocked. Do those methods offer a means to do this, or is a recursive folder-by-folder call necessary?
So I've made this control that inherits from the treeview control and basically loads objects from active directory into a treeview (url...).All working fine, but as this is the first custom control I have made that I have intended for other people to use, I'm not quite sure how I should approach error handling.I mean, obviously I shouldnt do something like show any exceptions in a messagebox because that might not be what the person that is using the control wants to happen. So do I just write out exception messages to the debug window? Do I swallow exceptions (guessing not)? Do I just totally ignore them so that they are thrown in the user's project?
i created a Class library (.dll) and loaded it as reference into a main project. In the code for the class i've handled exceptions using try..catch subs, however when debugging the main project exceptions that are handled in the DLL still get thrown! (the class ".vb" file gets loaded into the debugger and the line of the exception shows up)
Up till now i've found it useful that when an unhandled error occurs in the imported reference, it shows up in the main project with tracing back to the referenced class. But i dont want the exceptions that are handled in the reference class to be thrown when debugging the main project!
As you can see the exception thrown was handled with try...catch this class exception.vb belongs to the project that created the class library (.DLL that i referenced). i didnt even load the project that built the reference so it amazes me that it could find the coding class to begin with.
I am writing a class library that envelopes an USB device driver. This device has its own class library, provided by the hardware vendor.
Very often, especially if you handle with old DLL or COM assemblies, there are methods (functions to be correct) that return TRUE if all was OK, or FALSE if any error happen. Often these methods return information about the error in one of their parameters or separately in a GetLastError method or even if in an OnError event.
Now, normally I handle all native .NET exceptions in my class libray handling locally or re-throwing to the client if the error is useful to know. But what to do with all other errors that are hidden in the vendor's methods? (in the true I have no exceptions, but only returned TRUE or FALSE values).
Let's make an example with the method "CONNECT" that connect the client to the USB device.
I envelope the method in this way:
Public Sub Connect() oVendorDevice.connect() End Sub
now if any connection error happen, the vendor's connect method return FALSE. But I do not know why the connection failed. To know why the connection failed I have to call (for example) the method GetLastError that gives me information about the error. (but do not forget that other vendors use other strategies like returning the error in a method's parameter or in a OnError events.
Now, in order to follow a good .NET exception handling strategy I could write something like this:
Public Sub Connect() Dim res As Boolean = oVendorDevice.connect() If res = False Then
I am developing a game in compact framework. In Mobile Devices there is a button that Rotates the screen by 90 degrees so you can hold the mobile device the way that suits you. The problem is that i want to handle that in my game, so if i see that the screen has rotated the game will pause.
Part of my assignment is to check if input to Group Number and Number of Units are correct input by making error handling exceptions...
I have to check the following: a) group number is neither 501 nor 062 b) number of units are NOT numbers c) number of units is NOT a positive number
So my first question is, am I checking correctly? 2nd question is, How do I make sure my Exceptions will pertain to their correct respective things (a, b, and c.. above)?
I've just skipped around a few inbuilt VB classes' methods which throws exception. of all that i've came across, methods may throw multiple exceptions but ALL of them are exclusive, meaning there is no way 2 exceptions will ever occur simultaneously, yea and i was trying to make my class throw 2 exceptions simultaneously, hence this question, must all exceptions be exclusive?
I have recently taken a liking to programming, and have programmed a few games in C#,my friend has asked me to program an application for him to use in his shop. But I have no idea of what language is best suitable?
I avidly create games in VB.net. Being a hobby programmer I give my games away for free. Since I'm a hobbiest without formal training I do try and educate myself on proper programming principles and follow them when programming such as OOP. There are however some things I have obviously missed being self-taught that perhaps I would know if I were formally educated. Once such issue that has really been my bane is how different classes (from now on referred to as objects) 'know' about each other WITHOUT programming specific interaction.
Okay imagine this, you have a space game and the following objects
[CODE]...............
Now each one of these objects has a Health, X,Y and Z private members and properties that are all inherited from clsSpaceEntity for argument sake. Now one way of programming collision between them would be to code out the following logic in the main game loop
[CODE].........................
Now this might seam okay if your talking about the simple example above but some of my games have tens or even HUNDREDS of objects that interact in this basic way. Is there a way in OOP to do the following... for each thing that inherits from clsSpaceEntity check against every other object that inherits this type (except itself) and if they collide then reduce health next? This sort of ability for a type of objects/class or whatever to be 'aware' of another and how they are the same/different and interact would save me tonnes and tonnes and TONNES of coding.
I am new to .net and I usually had a common file which was having information of username,server,password,IPS and fixed integers in php and asp classic which i used to include in all files so that i could use them in any page. Since I have come to know that .net has no include function. how i can do it in asp.net?
I need to add some common details in more than two tables. [code]So i have stored the Department (from drop down list box) and assigned it to Dept.So i guess dept would have Csc if i choose csc and commerce if i hoose commerce.When I checked with breakpoint it s workin. Datas are added perfectly. But they are not visible in that respective table
In the old VB, there is a .bas file wherein i place all the global constants there and whenever i create a new project i just include that .bas file so that all the constants i placed are automatically added to my project. Is there any way to do this on VS2008? Ill be doing dozens of Class Libraries that that needs to reference global constants.
1. Is there any other way of referencing the global constants rather than making it a shared variable in a class?
2. Also, is there a way to include a .VB file without the copying it on the local project file? My point being is that this .VB file is also being used by other Class LIbraries that i created.
Is it possible to set up a common event handler for a group of like controls like buttons or text boxes so a single event handler is called regardless of which of the controls is clicked, changed, etc.In my PrinterDialog study project I have 5 text boxes named TB1, TB2, TB3, TB4 and TB5 in a text box array called TBs so they can be accessed with TBs(0), TBs(1), etc.My question is if I can set up a single click event that responds when any of the 5 text boxes are clicked to avoid duplicate code n 5 different click events.
I know it is not vb question but I was wondering if there is any place to get the common images for buttons (like save, clear, find, new , delete etc...)
I have to group the first column (Code) and from the second (Year) I have to get the data 'less common as possible' compared to all the other records. I try to explain this with the example: for the code 'A01' I have 2 years: '2001' and '2002'. I have to take '2001' because it's the one that not recurs in the other records. In the case that there aren't available values 'Year' that not recurs in the other records, it's good to take whatever value.
The data are in the form of array in memory and to interact with them I'm useng some LINQ queries.
Essentially, whenever my users who are logged in via a global module level variable enter a new form, their activity is "logged" in a textfile with their UserID as the name.txt and every time they visit a page it adds a new line to their log file with a number corresponding to the form they visited. For example, if they select "add a user" it will add the line "1" to their log file. Note: At the moment there is only 1 2 and 3 not 0.
I have got this far and I have got as far as creating an array which has: Array(0) = NumberOfTimes 0 appears in the log file Array(1) = NumberOfTimes 1 appears in the log file etc etc
Therefore the output for this is Msgbox(Array(0)) shows "0" MsgBox(Array(1)) shows "4" for example and lets just say MsgBox(Array(2)) shows "9" and MsgBox(Array(3)) shows "1"
Therefore, finally (!) my problem is now finding which 3 are the top. I have tried various methods of sorting them but I just get "9, 4, 1, 0" rather than "2, 1, 3, 0". (By the way the end product for this is to show three links on the "welcome form" of the users 3 most visited forms). Here is a pastebin of all the rubbish I have currently tried that hasn't worked! [URL]
When I was learning QBasic I found a list of most common errors and it told me whether my errors were syntax errors or logic errors. Where I can find a similar list for VB 2008 Express Edition?
i made an application using VB.NET 2010. i have 5 forms. i want to know how to make one common navigation (like in a webpage) for this application. Is it possible to have the menu and header static and loads each form in one dynamic container. I hope my questing is clear :P just to make it more cleared, it is more like having a templates in php coding where we can load other page in a particular area without having to reload the entire page with each links.
I am looking for a way to modify the default values in windows vista and or 7.
Examples:
* The default directory for the save/save-as dialog box. * The size of the window. * The "favorites" list on the left of the box.
I have been looking for a while and the only thing I can find is to edit the group policy but this will only affect programs that are using the xp dialog box.I am sure this is actualy pretty easy but I cannot find anything for the life of me
Here is a complicated, but possibly dumb question concerning adding projects together in the IDE in order to increase performance and share memory at the same time.I have written two distinct exe's. The first exe (file processsor) operates using three timers to perform communication between a hardware OEM proprietary ComServer and file output from the second exe. The second exe (work generator) simply outputs files on hard disk so that the "file processor" can process the commands in the order given. The first exe was written as a "background processor" to the second exe in a stand-alone fashion. There is a need to communicate data between the first and second exe that is time sensitive. The ComServer called by the "file processor" only allows one port to for communication to the hardware device that is a USB. The "file processor" is capable of extracting the data required but the existing technologies, such as RPC, IPC are too slow and or full of pitfalls. Microsoft's Memory Manger has found it easier to create multiple instances of the proprietary ComServer and assign the needed memory to the calling routine so that it can "scoot" memory easily in the garbage collection feature of the operating system. What this does is cause the mullitple instances that are created to "gang up" on the device either slowing its performance down, or causing time outs. [The second process is a custom 3-D graphical CAD/CAM. The first process is a machine interface. Although hind-sight is 20-20, it seemed more ideal to write this background or file processor independantly, as then it could communicate with existing as well as a custom CAD/CAMs.]
Simply writing the first processes' code into the second slows down the second process as a result of all the timer interrupts looking for work to do. (Mouse is squirrely, screen refresh is slow, etc.) I am only guessing here that the operating system's service of the more complicated single memory location is somehow interrupted more frequently for a larger project, than two smaller independant projects running seperately. I only know what I observer here. Interestingly, the two smaller projects running seperately seem to run fine.
Now for the dumb question. Is it possible to merge the "file processor" with the "work generator" in the IDE such that each process runs as independantly as two distinct apps, but at the same time, make it possible to share memory via one Module1.vb? So far, I cannot find a way for the "file processor" to see the "work generator's" Module1.vb, regardless of how many PUBLIC statements I issue in the code. In other words, what would be the steps after File->Add-> Existing Project to cause the "file processor" project with a form to start first, then drop to the background, followed by launching of the "work generator" second where each process shares the same Module1.vb?.
If this could be done, say through a compiler statement, or whatever; then this could make the Memory Manger folks happy, and provide for the speed required to operate real world processes? Basic computer science suggests a simple processor LD instruction could make data available to any application within a few clock ticks. Microsoft now longer allows direct memory access, or the ability to carve out a "stay resident" dll in memory where a memory location can be called for quick distribution information to all apps with just one call to a device.