Yes, I want to limit processing treads to number but with ability to change that number dynamicaly (.config file or database)
I think about this approach:
If _NumOfThreads< MAX_NUM_OF_THREADS Then
Dim myFunction as new myFileImport()
Dim mythread as new threading.thread(addressof myFunction.ImportFile)
mythread.start
_NumOfThreads +=1
End If
Private Sub SomeFeedbackFunction() Handles ????
_NumOfThreads -=1
End Sub
How to implement feedback?
In VB6 I used to use notification class. Something like that:
Class Notify
Public Event ThreadFinished()
Public Sub OnThreadFinish()
RaiseEvent ThreadFinished
End Sub
End Class
In main application I declare this class with events, create an instance and pass a reference to child Class (in this case to the class in the new thread):
When New Thread is about to finish his job it calls to objNotify.OnThreadFinish
In main App objNotify fires an event.
Will it work with multithreading and VB.net?
Thank you Michael
"Simon Verona" <ne**@aphroditeuk.com> wrote in message news:OZ**************@TK2MSFTNGP11.phx.gbl...
Depends on if you've got a finite no of threads...
"Michael" <md********@urb.ca> wrote in message news:e3**************@TK2MSFTNGP10.phx.gbl...
Ok. Looks like I do need feedback to notice that process is finished and
main application is safe to close.
How can I do that? Fire events?
"Simon Verona" <ne**@aphroditeuk.com> wrote in message
news:%2****************@tk2msftngp13.phx.gbl... No..
If your main application stops, all the threads die with it...
Regards
Simon
"Michael" <md********@urb.ca> wrote in message
news:es**************@TK2MSFTNGP11.phx.gbl... > Thanks Simon
>
> This is exactly what I need.
> But my question is still open:
> What happens with myFileImport Class when my Main Class ends?
> I guess that a new thread will continue to work without any problem, am I > right?
>
>
> Michael
>
>
>
> "Simon Verona" <ne**@aphroditeuk.com> wrote in message
> news:ON**************@TK2MSFTNGP12.phx.gbl...
>> I would create a seperate class to do the import. You will then need to >> create some properties in the class for the filename to import etc as you >> can't pass these to the thread easily when calling the function...
>>
>> So for example:
>>
>> Public Class myFileImport
>> Dim _Filename as string
>> Public Property FileName as string
>> Get
>> return _FileName
>> End Get
>> Set (ByVal Value as string)
>> _FileName=Value
>> End Set
>> End Property
>> Public Sub ImportFile()
>> ' Put your import code here
>> End Sub
>> End Class
>>
>>
>> Then in your main routine, create the thread as follows:
>>
>> Dim myFunction as new myFileImport()
>> Dim mythread as new threading.thread(addressof myFunction.ImportFile) >> mythread.start
>>
>> Hope this helps
>> Simon
>>
>> "Michael" <md********@urb.ca> wrote in message
>> news:O7**************@TK2MSFTNGP09.phx.gbl...
>> >I have an application that monitoring some directories.
>> > When new file arrives my application importing that file into database >> > (very
>> > long process)
>> > I want to rewrite this application to multithread application so if
>> > multiple
>> > files arrive at the same time the directory monitor should start new
>> > thread
>> > for each file . I don't need any feedback from importing routine (all
>> > information about flow stored into log file).
>> >
>> > I am looking for some samle application that have similar functionality > or
>> > some online tutorial / article on this subject.
>> >
>> > Also I have a question:
>> > What happens to class/method that run on separate thread if starting
>> > applications closed?
>> >
>> > Thanks you,
>> >
>> > Michael
>> >
>> >
>> >
>>
>>
>
>
In my application, I have a finite no, so I use a collection to store the threads in...
so, I define the collection as a module level variable as:
Dim runningThreads as new collection
Then each time I start a thread up... I add
runningthreads.add(mythread)
to add it to the collection (this goes just before the mythread.start line).
Then you can check that all the threads have closed by enumerating through them and checking the threadstate property... ie..
Dim t as thread
For Each t In runningthreads
If t.ThreadState <> Threading.ThreadState.Stopped Then
' Thread is still running
End if
I suppose you could take care of the fact that you have an ever growing no of threads by tidying them up in a timer.... eg create a timer to run every thirty seconds and then put code like this in the timer:
Dim t as thread
Dim cnt as int32=0
for each t in runningThreads
if t.threadstate=threading.threadstate.stopped then
runningthreads.remove(cnt)
end if
cnt+=1
next
This will remove the completed threads from your collection. There are other more elegant ways of doing this I'm sure - for example, encapsulating the whole thread collection in a class, but I think it will work just fine for you.
Hope this helps
Regards
Simon