|
I have an app running on an internal server using the following code:
Imports System.Web.Mail
Private Sub EmailError(Optional ByVal sError As String = "Default")
Try
TextBox1.Text += "Emailing Error now." & vbCrLf
TextBox1.Refresh()
Dim oMail As New MailMessage
oMail.To = m_sErrorEmail
oMail.From = "User1@xxxxx.org"
oMail.Subject = "Error Occured in Profile Scoring"
oMail.BodyFormat = MailFormat.Html
oMail.Body = sError
'SmtpMail.SmtpServer.Insert(0, "127.0.0.1")
SmtpMail.Send(oMail)
TextBox1.Text += "Email sent." & vbCrLf
TextBox1.Refresh()
Catch ex As Exception
TextBox1.Text += "Error occurred in EmailError." & vbCrLf
TextBox1.Text += "Stopping process." & vbCrLf
TextBox1.Refresh()
EmailError(ex.ToString())
btnEnd.PerformClick()
End Try
End Sub
The email goes out no problem as long as the To address is outside of the xxxxx.org domain. However, if trying to send to an internal email address (i.e. User2@xxxxx.org) then the email does not arrive. BTW both email accounts are valid in Active Directory.
Any thoughts? This is super simple code. Would love to know what I am doing wrong. I recognize that it may be an exchange or domain security issue but I need some direction. Thanks for your help.
CitizenSoldier
|
|
|
|
|
My VB application is accessing quite a few files, tables, select OCBC queries etc. I've painstakingly checked each and every one to make sure they are closed and set to NOTHING once I've done processing them. I need to add indexes to my tables at the very end of the app.
I've come accross "BackgroundFetch" as a refresh option, because even though the files are closed the app (or maybe my OS) is not seeing them as closed. "BackgroundFetch=No" or "BackgroundFetch=Yes"? Neither fail or cause errors when added to the connection strings. But neither stop the database error either.
Currently I've taken the easy way out and just made the app sleep for a minute before adding the indexes. Does anyone know if I'm using "BackgroundFetch" correctly? Is there another option to force a refresh on these tables that are already closed?
Aubrey
|
|
|
|
|
Hi!
I have a form(constitued my linklabels) that creates other child forms.When i click on one of the form1 elements the "spawnned" child works just fine(creation starts in the event handler). In my application i have an object that has threads that comunicate with the main form by means of an event.When something happens in the thread i raise in it an event and a handler in form1 gets the request.The thing is that when i use the same function to create the new form, it just hangs(after a while the window enters in a NOT RESPOND state!).Any hint on this?Is it because the thread doesn't terminate and the form hangs waiting for the thread to terminate?
|
|
|
|
|
carlos_rocha wrote:
In my application i have an object that has threads that comunicate with the main form by means of an event.When something happens in the thread i raise in it an event and a handler in form1 gets the request.The thing is that when i use the same function to create the new form, it just hangs(after a while the window enters in a NOT RESPOND state!).
In this scenario you should use Control.Invoke() [^] to marshal the execution of the event handler to the thread that owns form1. Multithreaded Windows Forms Control Sample[^] explains why this is necessary (see also Asynchronous Execution in Visual Basic .NET[^] for a well documented code sample).
Best regards
Dennis
|
|
|
|
|
Hi! First of all, thank you for your reply.I'm a bit new to vb.net so i didn't quite understand what you said, or i didnt' explain my problem correctly.I haev the main form, FORM1 that has an object that contains a thread.When something happens in that thread i raise and event to FORM1 and the handler calls a function that creates the form. The sample in msdn is a bit confusing.Where should i use the invoke() method? Directly in FORM1 or in the thread?
|
|
|
|
|
carlos_rocha wrote:
I haev the main form, FORM1 that has an object that contains a thread.When something happens in that thread i raise and event to FORM1 and the handler calls a function that creates the form.
Well, if I understood you correctly you've got an event handler like this which is called in another thread (i.e. other than the thread that owns form1 and most likely runs the standard
application message loop):
Private Sub SomeEventHandler()
someObjVar = New Form2()
someObjVar.Show()
End Sub
The problem is that you're not supposed to do this in any thread. In general only the thread that owns a control (meaning that originally created it) should manipulate it. The easiest way is to create any controls (that includes forms and usercontrols) in the same thread. Therefore you need to make a cross-thread call if you want to do something with your UI from another thread. To find out if the call needs to be marshalled you use the Control.InvokeRequired Property[^] and end up with something like this:
Private Sub SomeEventHandler()
If Me.InvokeRequired Then
Me.Invoke(New appropriateDelegate(AddressOf Me.SomeEventHandler))
Else
someObjVar = New Form2()
someObjVar.Show()
End If
End Sub
I recommend you keep on reading the MSDN articles and references and come back and ask again whenever you don't understand something. Threading is a straining business and if you don't know what your doing you might end up with some strange behaviour (for example if you don't have a good concept for handling exceptions or call some control's methods ).
Best regards
Dennis
|
|
|
|
|
Hi again! ok, i hope u don't get mad at me but...maybe i didn't explain my problem correctly(again). When you say "Well, if I understood you correctly you've got an event handler like this which is called in another thread (i.e. other than the thread that owns form1 and most likely runs the standard" i mean, the event handler is in FORM1 but the event is in another thread.
When you say "Therefore you need to make a cross-thread call if you want to do something with your UI from another thread" do you mean direct manipulations?Because i'm not changig things directly from the other thread, i call the event in that thread so that the handler in the FORM1(that has the control) creates the new form.Shouldn't his work? I'm completly lost :P
|
|
|
|
|
carlos_rocha wrote:
ok, i hope u don't get mad at me but...
No. Not yet.
carlos_rocha wrote:
i mean, the event handler is in FORM1 but the event is in another thread.
Well, at least I think I understood you correctly. Regarding your event handler: an event handler, no matter to which class it belongs, is ultimately nothing else than a piece of code. Let's say you start with thread A. A is your main thread. It creates the application message loop, a form and a second thread B. If this thread B wants to raise an event, it calls the delegates which were registered thru the appropriate event. Accordingly this delegate will be executed in thread B no matter that it was originally registered in thread A. So just because an object was created in thread X does not mean that every call of a method of the particular object will be automatically executed in thread X.
carlos_rocha wrote:
Because i'm not changig things directly from the other thread, i call the event in that thread so that the handler in the FORM1(that has the control) creates the new form.
Yeah, form1 creates the new form, but in the "wrong" thread (as I called it, thread B). So the "wrong" thread will be the owner of the new form instance.
carlos_rocha wrote:
Shouldn't his work?
Counter question: have you already tried to get it to run with Control.Invoke() ?
Best regards
Dennis
|
|
|
|
|
Man, you explained the problem very well!!! i'm sorry, i haven't tried the control.invoke() i will test now.Stay tuned (please)
|
|
|
|
|
Hi! You're the man. Control.Invoke() worked just fine. Before i use it i do a test using InvokeRequired(), if it gives out true it's because i'm not on the thread that initially created the form, so i call invoke().
Thank you very much.
|
|
|
|
|
Hi,
I was wondering if someone could tell me how to add an icon overlay to selected files? I was hoping I would be able to reference it such as...
SetIconOverlay("MyFile.txt", "myOverlay.ico") ' to set the overlay icon.
GetIconOverlay("MyFile.txt") ' to get the overlay icon.
RemIconOverlay("MyFile.txt") ' to remove the overlay icon.
Thank,
|
|
|
|
|
Hi Again,
Can anyone help please?
Thanks,
|
|
|
|
|
I am creating a control and would like to include a property which would act similar to the font property. I have succeeding in getting the ellipsis and '+' sign in the property area, and the custom editor works fine as a single user defined type.
When I try to make the property an array, I get syntax errors and can't get past defining the property as an array.
Does anyone have code where they developed a property similar to the font property (an array of user defined types using a custom editor)?
Thanks
|
|
|
|
|
I think I know the answer to your question and there a few steps you need to take. First is to create a class for a type converter. This is a generic type converter to support my custom controls forming custom textbox, panel and label controls that inherit from a base class called DHObjects.
<br />
Public Class DHTypeConverter<br />
Inherits TypeConverter<br />
<br />
Public Overloads Overrides Function GetPropertiesSupported(ByVal context As System.ComponentModel.ITypeDescriptorContext) As Boolean<br />
Return True<br />
End Function<br />
<br />
Public Overloads Overrides Function GetProperties(ByVal context As System.ComponentModel.ITypeDescriptorContext, ByVal value As Object, ByVal attributes() As System.Attribute) As System.ComponentModel.PropertyDescriptorCollection<br />
Return TypeDescriptor.GetProperties(GetType(DHObject))<br />
<br />
End Function<br />
End Class<br />
NEXT is to create your class of controls and then add your custom control to a class or usercontrol in the form of a property and add the attibutes that tell the property grid how to handle your custom type:
<br />
<TypeConverter(GetType(DHTypeConverter)), _<br />
DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)> _<br />
Property MoveBackButton() As DHButton<br />
Get<br />
Return m_MoveBackButton<br />
End Get<br />
Set(ByVal Value As DHButton)<br />
m_MoveBackButton = Value<br />
End Set<br />
End Property<br />
|
|
|
|
|
I have the typeconverter/class properties already included in my class, which works well until I try to make the property an array of user defined types (like the font property with multiple fonts, each font containing it's own set of properties).
|
|
|
|
|
Your question may be over my head. Maybe you should post the errors you are receiving. See if this helps though. This property presents an array of user types in the property grid. Of couse you would need a custom type converter to pretty it up.
<br />
Dim m_foobar() As Foobar = {New Foobar, New Foobar}<br />
<br />
Property MyFooBar() As Foobar() '<--Notice the bracktes<br />
Get<br />
Return m_foobar<br />
End Get<br />
Set(ByVal Value As Foobar())<br />
m_foobar = Value<br />
End Set<br />
End Property<br />
<br />
Public Class Foobar<br />
<br />
Dim m_Foo As TextBox<br />
<br />
Property FooTextBox() As TextBox<br />
Get<br />
Return m_Foo<br />
End Get<br />
Set(ByVal Value As TextBox)<br />
m_Foo = Value<br />
End Set<br />
End Property<br />
<br />
Overrides Function ToString() As String<br />
Return "(FooBar)"<br />
End Function<br />
|
|
|
|
|
Here i want to programattically use symantec antivirus and get notified when the scaning is over .For that i used a command line utility from symantec.com VPSCAN.exe.I created the process using createprocess api ie i supplied the path of VPSCAN.exe along with the files to scan,and i m waiting for the scan to complete usig waitforsingleobject api.But as soon as i execute program the tool starts and exits but scaning is going behind by SYmantec AV ver 8.0 ,so my problem is that how should i figure out when that scan is complete??? Pls help me out
S/W engineer
Hewlett-Packard
Bangalore
|
|
|
|
|
singhrajendra wrote:
For that i used a command line utility from symantec.com VPSCAN.exe.I created the process using createprocess api ie i supplied the path of VPSCAN.exe along with the files to scan,and i m waiting for the scan to complete usig waitforsingleobject api.
Sorry, I don't really get it. Do you want to re-write it in VB.NET or are you trying to use the Win32 API and you can't get it to work? In that case it would also help if you'd provide some excerpts from the source code you're using.
Best regards
Dennis
|
|
|
|
|
OK thanks for the reply . here is the excerpts form the src code::
Public Sub ExecuteAndWait(cmdline As String)
Dim c, d As Long
Dim x As Long
Dim snull As String
Dim b As SECURITY_ATTRIBUTES
Dim a As SECURITY_ATTRIBUTES
Dim pinfo As PROCESS_INFORMATION
Dim sinfo As STARTUPINFO
sinfo.cb = Len(sinfo)
' snull = "/U D:\My FTP\1"
x = CreateProcess("D:\ftp.exe", "\ /U D:\My FTP\1", ByVal 0&, ByVal 0&, 1&, NORMAL_PRIORITY_CLASS, ByVal 0&, snull, sinfo, pinfo)
x = WaitForSingleObject(pinfo.hProcess, INFINITE)
Do While x <> 0
If ret < 0 Then
Exit Sub
End If
DoEvents
Debug.Print x
x = WaitForSingleObject(pinfo.hProcess, _
INFINITE)
Loop
x = CloseHandle(pinfo.hProcess)
End Sub
So here what is actually happening is that thread VPSCAN.exe passes the cmd line args to anti virus and exits immediatedly .So i m looking any way to figure out when that scan is complete.I m using Symantec antivirus 8.0
S/W engineer
Hewlett-Packard
Bangalore
|
|
|
|
|
I think you're going to have to contact Symantec on this one. The Process you launch will pass it's parameters to the scanning engine, which is always running, then quit. Your WaitForSingleObject is watch that command line process that you launched, not the scanning engine.
The scanning engine, on the other hand, can't be watched using WaitForSingleObject because it never quits. I don't know if Symantec exposes any kind of API you could tap into. This is what your going to need to get a reliable interface into AntiVirus and why your going to have to look for help from Symantec.
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
need to make a change machine. I.E. if someone cashed in all their pennies nickles dimes and quarters i need to exchange it for tens, five, ones, etc... need assistance today (12/15/04) I know it's up to you guys to help or not but I'm desperate. please help. I don't know how to use the MOD.
|
|
|
|
|
|
it must be done in vb.net format. All I have to do is figure out a program that will allow me to exchange coins of any amount ot dollars.
|
|
|
|
|
I still dont understand that. need help writing the code anybody???? please
|
|
|
|
|
Why dont you start with what you've tried so far, as you cant honestly expect someone to just write all the code for you, surely?
Or is it overdue homework perchance?
|
|
|
|