|
Sorry, dumb question here.
If I make a method in a class it is not a shared method and needs to be instantiated.
If I make a method in a form it becomes a shared method and does not need to be instantiated.
I want to call these methods from various places in my code, perhaps even from different threads at the same time.
It's easier to call a shared method because there's no need to instantiate it. But does doing so create the possibility of more than one thread calling the method at the same time thus creating problems?
In short, should I instantiate all of my method calls, even to the shared methods in a form?
Thanks, and Happy Holidays all!
|
|
|
|
|
You can put the word "shared" in your routine definitions to make them shared.
Public Class Example<br />
Public Shared Sub See()<br />
'this is a shared routine<br />
End Sub<br />
End Class
Use:
Example.See << no instantiance...
'Never argue with an idiot; they'll drag you down to their level and beat you with experience.' ~ anonymous
|
|
|
|
|
Right, but not my question.
Question: Is it safe to call a shared method from multiple threads? I'm concerned that the shared method might be called by more than one thread at the same time.
|
|
|
|
|
cstrader232 wrote: Question: Is it safe to call a shared method from multiple threads? I'm concerned that the shared method might be called by more than one thread at the same time.
In general, yes. But it depends on what the shared method code is doing.
|
|
|
|
|
yes that is a concern but like dave said it depends on what it's doing. you can use synclock to make sure one thread executes a chuck of code at at time...
'Never argue with an idiot; they'll drag you down to their level and beat you with experience.' ~ anonymous
|
|
|
|
|
cstrader232 wrote: If I make a method in a form it becomes a shared method and does not need to be instantiated.
False. The method becomes Shared only if you specify it in the method definition.
|
|
|
|
|
Wait! What am I missing -- it looks to me like methods in forms by default ARE shared:
Dim A below creates an error:
Error 93 Reference to a non-shared member requires an object reference.
Dim B below does not
Class Worker
Sub Work()
Dim A = TestClass.test
Dim B = TestClass2.test
End Sub
End Class
Public Class TestClass
Function test()
Return 99
End Function
End Class
Public Class TestClass2
Inherits System.Windows.Forms.Form
Function test()
Return 99
End Function
End Class
|
|
|
|
|
why do you say that? if you got an error when trying to access a function that's not shared. you get an error? why do you feel they are defaulted?
'Never argue with an idiot; they'll drag you down to their level and beat you with experience.' ~ anonymous
|
|
|
|
|
Well what I noticed was that if the class inherits from system.windows.forms.form then my test function in my code didn't need to be instantiated. However, if the class does not inherit from system.windows.forms.form then the test class did need to be instantiated.
|
|
|
|
|
cstrader232 wrote: then my test function in my code didn't need to be instantiated.
Yes, it does. A Form is just another class. There's nothing special about it that automatically makes its methods Shared.
The error you got has nothing to do with the class you made that inherited from Form. The code you wrote never made it to the line that uses the TestClass2.Test method. It bmbed out on the line before it.
|
|
|
|
|
OK, maybe I'm being dense but there IS something different between the two classes below. What happens if you paste this code into a new program? Don't you get an error on line 4 that prevents compilation whereas line 5 works fine?
1 Class Worker
2
3 Sub Work()
4 Dim A = TestClass.test
5 Dim B = TestClass2.test
End Sub
End Class
Public Class TestClass
Function test()
Return 99
End Function
End Class
Public Class TestClass2
Inherits System.Windows.Forms.Form
Function test()
Return 99
End Function
End Class
|
|
|
|
|
That depends on the rest of the project. What's the startup object? Is it the TextClass2 form? How does the Worker class get instantiated?? There's too much stuff missing to tell you what's going on.
|
|
|
|
|
OK, let's make it simpler:
Form1 class does not require instantiation
T class does!
_____
Public Class Form1
Function test()
Return 99
End Function
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Console.WriteLine(test) 'THIS LINE WRITES 99 (NO INSTANTIATION?)
Console.WriteLine(T.test) 'THIS LINE WON'T RUN (NEEDS INSTANTATION!)
''Can do it this way though if we want (WITH INSTANTATION)
Dim t1 As New T
Console.WriteLine(t1.test)
End Sub
End Class
Public Class T
Function test()
Return 99
End Function
End Class
|
|
|
|
|
When you show the Form1 and run the code in Button1_Click, it is already instantiated. Check under Main.
|
|
|
|
|
cstrader232 wrote: Public Class Form1
Function test()
Return 99
End Function
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Console.WriteLine(test) 'THIS LINE WRITES 99 (NO INSTANTIATION?)
Calling instance members of a class from inside the same class uses the current instance of the class, in this case, Form1. The current instance is refered to as Me . This line actually looks like this:
Console.WriteLine(Me.test)
In C#, it would look like this:
Console.WriteLine(this.test);
The next line needs to create an instance of the T class because the Console line is executing as part of a different class.
|
|
|
|
|
hi
i am looking for a example to use documentdownload2 event but i dint get a single sample code to use it.please could any one help me in using internetexplorerclass and its events like documentdownload2 navigate2......
with regards
Balagurunathan.B
|
|
|
|
|
DocumentDownload2 isn't even documented so I wouldn't worry about using it.
Which version of VB are you using?? VB6, VB.NET 2002, 2003, 2005, or 2008??
|
|
|
|
|
i am using vb.net 2005. could you please give me any idea r suggestion or any link to use internetexplorerclass
with regards
Balagurunathan.B
|
|
|
|
|
Why not just use the WebBrowser control in the toolbox??
|
|
|
|
|
i want to get the id of the controls in html page
main reason i am looking for is to record the actions and events on the browser and replay it.
with regards
Balagurunathan.B
|
|
|
|
|
Hi,
I've seen some programs use wide images which have like 3 images inside and on run-time only a third on the image is shown in a picture-box and on mouse-over a different third of the image is shown and on-click a different third of the image is shown. does anyone know how to do that or there any built class for such things?
Thanks
|
|
|
|
|
You handle this like any mouse over, you handle the events for enter and leave and you change the picture as the mouse position changes, in code. Writing a control to encapsulate this would be very easy, if you need to do it in a lot of places.
Christian Graus - Microsoft MVP - C++
"also I don't think "TranslateOneToTwoBillion OneHundredAndFortySevenMillion FourHundredAndEightyThreeThousand SixHundredAndFortySeven()" is a very good choice for a function name" - SpacixOne ( offering help to someone who really needed it ) ( spaces added for the benefit of people running at < 1280x1024 )
|
|
|
|
|
any example for how to divide the image?
|
|
|
|
|
Probably the most logical thing to do is not divide the image, just write a control that draws different portions of the image in it's paint event, based on the mouse position.
Or you can just create bitmaps of the correct size and draw the parts of teh iamge into them.
Christian Graus - Microsoft MVP - C++
"also I don't think "TranslateOneToTwoBillion OneHundredAndFortySevenMillion FourHundredAndEightyThreeThousand SixHundredAndFortySeven()" is a very good choice for a function name" - SpacixOne ( offering help to someone who really needed it ) ( spaces added for the benefit of people running at < 1280x1024 )
|
|
|
|
|
Thanks for the reply, but that is what i mean.
do you have eny example for how to draw different portions of the image on the control?
|
|
|
|