473,836 Members | 1,434 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

Asynchronous Programming

I'm trying to determine if I need to make my application multi-threaded, or
if it can be done with asynchronous programming. I realize that asynch calls
do create a new thread in the background, but when they come back, they
return to the thread that launched them, is that correct? If I go
multi-threaded, then I just need to spawn a new thread for each new
connection, right?

What I'm doing here is making a service that accepts connections via TCP,
does some stuff, and then returns a response. Would my best bet be to go
asych or multi-threaded? Any articles on either or both would be much
appreciated.

Thanks,
Steve
Nov 15 '05
48 5447
Hmm, I would like to see some code.
With a default 1MB stack space reserved per thread and a 2GB user address
space, the max number of threads is less than 2000, you can't have 20000
threads created.
You said:
<I could get ~20,000 threads running pretty well. >
But taskmanager only showed ~571, that means currently only that number of
OS threads where created. And from here the system started trashing, right.
Creating additional threads takes so much time that you won't get any
additional threads from the OS.

Willy.

"William Stacey [MVP]" <st***********@ mvps.org> wrote in message
news:Os******** ********@TK2MSF TNGP12.phx.gbl. ..
I gotta tell ya Chad, you made me see a new light on this. I went and put
together a virtual socket class that "creates" packets for reading and
created two tests. First test is creating X number of threads and one
socket per thread that reads N number of packets. Second test was
creating
same number of sockets in a object that manages the sockets in a
collection
and posts an event that a worker thread(s) waits on. Results vary based
on
syncing threads with a shared object (i.e. a fake write queue for example)
that you can set to sleep and/or spinWait. I could get ~20,000 threads
running pretty well. Trying to start 30,000 locked up my app each time,
but
could just stop it in TaskManager without a crash. I never saw
TaskManager
Threads go over ~571, so not sure if that is just showing running threads
or
if CLR only releases so many OS threads and does some other management in
the background. Very suprising results. It's not a clear winner in all
cases and not sure of effects of running 1000+ threads for long time in a
server app, but these results are interesting. If anyone wants to play
with
this test harness, I can post it to web. It fun to play with different
options to see time effects of injecting sleeps or waits, etc. Cheers!

--
William Stacey, MVP

"Chad Z. Hower aka Kudzu" <cp**@hower.org > wrote in message
news:Xn******** **********@127. 0.0.1...
"William Stacey [MVP]" <st***********@ mvps.org> wrote in
news:u6******** ******@tk2msftn gp13.phx.gbl:
> A good way to go would be to wait on multiple socket events (one socket for > each tcp client) in a WaitForMultiple Events call, then get the index of the

The problem with this is there is a limit of 64 per call, so you still

need
to break it into threads anways. And then you break your code away from
seqeuntial to handling 64 state machines... makes for ugly code.
> contention for shared resources goes up with number of threads.. If

many > clients, you probably want to go async. You could probably also use
> I/O
> completion ports and a thread pool, have not really seen good examples of > this from managed code however.


Indy has support for this using fibers. This part is in SuperCore and

hasnt
been ported to .net yet. This part will likely have to be unmanaged until
fibers, etc are accesible as managed objects.
--
Chad Z. Hower (a.k.a. Kudzu) - http://www.hower.org/Kudzu/
"Programmin g is an art form that fights back"


Nov 15 '05 #31
Sounds strange, but it worked. .Net must be using fibers or something.
I'll post the code.

--
William Stacey, MVP

"Willy Denoyette [MVP]" <wi************ *@pandora.be> wrote in message
news:uK******** ******@TK2MSFTN GP09.phx.gbl...
Hmm, I would like to see some code.
With a default 1MB stack space reserved per thread and a 2GB user address
space, the max number of threads is less than 2000, you can't have 20000
threads created.
You said:
<I could get ~20,000 threads running pretty well. >
But taskmanager only showed ~571, that means currently only that number of
OS threads where created. And from here the system started trashing, right. Creating additional threads takes so much time that you won't get any
additional threads from the OS.

Willy.

"William Stacey [MVP]" <st***********@ mvps.org> wrote in message
news:Os******** ********@TK2MSF TNGP12.phx.gbl. ..
I gotta tell ya Chad, you made me see a new light on this. I went and put together a virtual socket class that "creates" packets for reading and
created two tests. First test is creating X number of threads and one
socket per thread that reads N number of packets. Second test was
creating
same number of sockets in a object that manages the sockets in a
collection
and posts an event that a worker thread(s) waits on. Results vary based
on
syncing threads with a shared object (i.e. a fake write queue for example) that you can set to sleep and/or spinWait. I could get ~20,000 threads
running pretty well. Trying to start 30,000 locked up my app each time,
but
could just stop it in TaskManager without a crash. I never saw
TaskManager
Threads go over ~571, so not sure if that is just showing running threads or
if CLR only releases so many OS threads and does some other management in the background. Very suprising results. It's not a clear winner in all
cases and not sure of effects of running 1000+ threads for long time in a server app, but these results are interesting. If anyone wants to play
with
this test harness, I can post it to web. It fun to play with different
options to see time effects of injecting sleeps or waits, etc. Cheers!

--
William Stacey, MVP

"Chad Z. Hower aka Kudzu" <cp**@hower.org > wrote in message
news:Xn******** **********@127. 0.0.1...
"William Stacey [MVP]" <st***********@ mvps.org> wrote in
news:u6******** ******@tk2msftn gp13.phx.gbl:
> A good way to go would be to wait on multiple socket events (one socket
for
> each tcp client) in a WaitForMultiple Events call, then get the index
of the

The problem with this is there is a limit of 64 per call, so you still

need
to break it into threads anways. And then you break your code away from
seqeuntial to handling 64 state machines... makes for ugly code.

> contention for shared resources goes up with number of threads.. If

many
> clients, you probably want to go async. You could probably also use
> I/O
> completion ports and a thread pool, have not really seen good
examples of
> this from managed code however.

Indy has support for this using fibers. This part is in SuperCore and

hasnt
been ported to .net yet. This part will likely have to be unmanaged

until fibers, etc are accesible as managed objects.
--
Chad Z. Hower (a.k.a. Kudzu) - http://www.hower.org/Kudzu/
"Programmin g is an art form that fights back"




Nov 15 '05 #32
No it doesn't use fibers. The problem is that the number of threads
currently created (what you see in perfmon), set's such a load on the system
(CPU and Page File IO) that new threads aren't getting created.
Please watch some perf counters like Process Threads ,Process Virtual Memory
size and Page File size and you will understand why.

Willy.
"William Stacey [MVP]" <st***********@ mvps.org> wrote in message
news:%2******** **********@TK2M SFTNGP12.phx.gb l...
Sounds strange, but it worked. .Net must be using fibers or something.
I'll post the code.

--
William Stacey, MVP

"Willy Denoyette [MVP]" <wi************ *@pandora.be> wrote in message
news:uK******** ******@TK2MSFTN GP09.phx.gbl...
Hmm, I would like to see some code.
With a default 1MB stack space reserved per thread and a 2GB user address
space, the max number of threads is less than 2000, you can't have 20000
threads created.
You said:
<I could get ~20,000 threads running pretty well. >
But taskmanager only showed ~571, that means currently only that number
of
OS threads where created. And from here the system started trashing,

right.
Creating additional threads takes so much time that you won't get any
additional threads from the OS.

Willy.

"William Stacey [MVP]" <st***********@ mvps.org> wrote in message
news:Os******** ********@TK2MSF TNGP12.phx.gbl. ..
>I gotta tell ya Chad, you made me see a new light on this. I went and put > together a virtual socket class that "creates" packets for reading and
> created two tests. First test is creating X number of threads and one
> socket per thread that reads N number of packets. Second test was
> creating
> same number of sockets in a object that manages the sockets in a
> collection
> and posts an event that a worker thread(s) waits on. Results vary
> based
> on
> syncing threads with a shared object (i.e. a fake write queue for example) > that you can set to sleep and/or spinWait. I could get ~20,000 threads
> running pretty well. Trying to start 30,000 locked up my app each
> time,
> but
> could just stop it in TaskManager without a crash. I never saw
> TaskManager
> Threads go over ~571, so not sure if that is just showing running threads > or
> if CLR only releases so many OS threads and does some other management in > the background. Very suprising results. It's not a clear winner in
> all
> cases and not sure of effects of running 1000+ threads for long time in a > server app, but these results are interesting. If anyone wants to play
> with
> this test harness, I can post it to web. It fun to play with different
> options to see time effects of injecting sleeps or waits, etc. Cheers!
>
> --
> William Stacey, MVP
>
> "Chad Z. Hower aka Kudzu" <cp**@hower.org > wrote in message
> news:Xn******** **********@127. 0.0.1...
>> "William Stacey [MVP]" <st***********@ mvps.org> wrote in
>> news:u6******** ******@tk2msftn gp13.phx.gbl:
>> > A good way to go would be to wait on multiple socket events (one socket > for
>> > each tcp client) in a WaitForMultiple Events call, then get the index of > the
>>
>> The problem with this is there is a limit of 64 per call, so you still
> need
>> to break it into threads anways. And then you break your code away
>> from
>> seqeuntial to handling 64 state machines... makes for ugly code.
>>
>> > contention for shared resources goes up with number of threads.. If
> many
>> > clients, you probably want to go async. You could probably also use
>> > I/O
>> > completion ports and a thread pool, have not really seen good examples > of
>> > this from managed code however.
>>
>> Indy has support for this using fibers. This part is in SuperCore and
> hasnt
>> been ported to .net yet. This part will likely have to be unmanaged until >> fibers, etc are accesible as managed objects.
>>
>>
>> --
>> Chad Z. Hower (a.k.a. Kudzu) - http://www.hower.org/Kudzu/
>> "Programmin g is an art form that fights back"
>
>


Nov 15 '05 #33
Your right Willy. I botched it after looking harder. I created the 20,000,
then started them one after another in a loop. The first ones started and
finished before the next couple couple started and chased each other like
that until loop done - so probably no more then 10-30 actually ran at same
time. I fixed that and could get about 1700 but never 1800 started at same
time. I will fix some more to get some better results. Actually, I am glad
of this because this goes more inline with what I though would happen before
I started the test and what I have read in many good books on the subject
(so I don't have to burn them now.) Will post the code anyway when I
tighten a few things up and post some numbers. As ~1700 seems to be max
(without hardly anything else going on), I would venture a guess that
100-500 may be ~workable in a running server for a thread per client
approach (not sure as this point). That means (I think) a socket collection
with an Event at the head of a loop is the ~only way to do high connection
(500+) count TCP servers. BTW - How does IIS work it?

Thanks for post. Cheers!

--
William Stacey, MVP

"Willy Denoyette [MVP]" <wi************ *@pandora.be> wrote in message
news:uj******** ******@TK2MSFTN GP10.phx.gbl...
No it doesn't use fibers. The problem is that the number of threads
currently created (what you see in perfmon), set's such a load on the system (CPU and Page File IO) that new threads aren't getting created.
Please watch some perf counters like Process Threads ,Process Virtual Memory size and Page File size and you will understand why.

Willy.
"William Stacey [MVP]" <st***********@ mvps.org> wrote in message
news:%2******** **********@TK2M SFTNGP12.phx.gb l...
Sounds strange, but it worked. .Net must be using fibers or something.
I'll post the code.

--
William Stacey, MVP

"Willy Denoyette [MVP]" <wi************ *@pandora.be> wrote in message
news:uK******** ******@TK2MSFTN GP09.phx.gbl...
Hmm, I would like to see some code.
With a default 1MB stack space reserved per thread and a 2GB user address space, the max number of threads is less than 2000, you can't have 20000 threads created.
You said:
<I could get ~20,000 threads running pretty well. >
But taskmanager only showed ~571, that means currently only that number
of
OS threads where created. And from here the system started trashing,

right.
Creating additional threads takes so much time that you won't get any
additional threads from the OS.

Willy.

"William Stacey [MVP]" <st***********@ mvps.org> wrote in message
news:Os******** ********@TK2MSF TNGP12.phx.gbl. ..
>I gotta tell ya Chad, you made me see a new light on this. I went and

put
> together a virtual socket class that "creates" packets for reading and > created two tests. First test is creating X number of threads and one > socket per thread that reads N number of packets. Second test was
> creating
> same number of sockets in a object that manages the sockets in a
> collection
> and posts an event that a worker thread(s) waits on. Results vary
> based
> on
> syncing threads with a shared object (i.e. a fake write queue for

example)
> that you can set to sleep and/or spinWait. I could get ~20,000 threads > running pretty well. Trying to start 30,000 locked up my app each
> time,
> but
> could just stop it in TaskManager without a crash. I never saw
> TaskManager
> Threads go over ~571, so not sure if that is just showing running

threads
> or
> if CLR only releases so many OS threads and does some other management
in
> the background. Very suprising results. It's not a clear winner in
> all
> cases and not sure of effects of running 1000+ threads for long time
in a
> server app, but these results are interesting. If anyone wants to
play > with
> this test harness, I can post it to web. It fun to play with different > options to see time effects of injecting sleeps or waits, etc. Cheers! >
> --
> William Stacey, MVP
>
> "Chad Z. Hower aka Kudzu" <cp**@hower.org > wrote in message
> news:Xn******** **********@127. 0.0.1...
>> "William Stacey [MVP]" <st***********@ mvps.org> wrote in
>> news:u6******** ******@tk2msftn gp13.phx.gbl:
>> > A good way to go would be to wait on multiple socket events (one

socket
> for
>> > each tcp client) in a WaitForMultiple Events call, then get the index of
> the
>>
>> The problem with this is there is a limit of 64 per call, so you

still > need
>> to break it into threads anways. And then you break your code away
>> from
>> seqeuntial to handling 64 state machines... makes for ugly code.
>>
>> > contention for shared resources goes up with number of threads.. If > many
>> > clients, you probably want to go async. You could probably also use >> > I/O
>> > completion ports and a thread pool, have not really seen good

examples
> of
>> > this from managed code however.
>>
>> Indy has support for this using fibers. This part is in SuperCore and > hasnt
>> been ported to .net yet. This part will likely have to be unmanaged

until
>> fibers, etc are accesible as managed objects.
>>
>>
>> --
>> Chad Z. Hower (a.k.a. Kudzu) - http://www.hower.org/Kudzu/
>> "Programmin g is an art form that fights back"
>
>



Nov 15 '05 #34
"William Stacey [MVP]" <st***********@ mvps.org> wrote in
news:#u******** ******@TK2MSFTN GP11.phx.gbl:
up and post some numbers. As ~1700 seems to be max (without hardly
Yes it is becuase of process limits. Each thread is allocated 2M of process
space, and in a 32 bit space 4G is the limit. So thats 2000, but a process
already has allocated space... so 1700 is about right.

In XP you can create threads with smaller process spaces to bump it higher.
Im not sure if .net threads have this option.
anything else going on), I would venture a guess that 100-500 may be
~workable in a running server for a thread per client approach (not sure
100-500 is very workable. I have servers running 24/7/365 with that many
threads in many many installations wtih no issues and no major CPU drain.

Even 1,000 is feasible if you dont build in your own bottlenecks. In most
cases interthread communication or contention in user code is the
bottleneck long before the threads are.
as this point). That means (I think) a socket collection with an Event
at the head of a loop is the ~only way to do high connection (500+)
Nope.... As I said even 1000 is ok. And I've gone as high as 1500
successfully.
count TCP servers. BTW - How does IIS work it?


IIS uses IOCP and thread pools. Remember IIS is HTTP and HTTP is "hit and
go" so it doesnt need to keep thread around for "spurious" connections.

Indy 10 has an option to use fibers and IOCP. The cool thing is its all
hidden from the user and they can switch from threads + winsock to fibers +
IOCP without changing a single line of their code.

And since Indy 10 has its own scheduler built in - its VERY efficient. Its
not been optimized yet but its been through some serious testing and will
push to 10,000+ and likely when done push to 40,000 or more (the socket
limit of Windows) on a machine with enough RAM to allocate sockets. So in
Indy 10 - the limit now is Windows and how many sockets it can allocate,
not the threads.

The problem at 40,000 again becomes one of just sheer memory though... 64
bit will help here.
--
Chad Z. Hower (a.k.a. Kudzu) - http://www.hower.org/Kudzu/
"Programmin g is an art form that fights back"
Nov 15 '05 #35
"William Stacey [MVP]" <st***********@ mvps.org> wrote in
news:Os******** ******@TK2MSFTN GP12.phx.gbl:
I gotta tell ya Chad, you made me see a new light on this. I went and


Good. :)

--
Chad Z. Hower (a.k.a. Kudzu) - http://www.hower.org/Kudzu/
"Programmin g is an art form that fights back"
Nov 15 '05 #36
> Nope.... As I said even 1000 is ok. And I've gone as high as 1500
successfully.
Well I was thinking more in terms of being safe and not pushing things util
it crashes as we may not have perfect knowledge upfront of all the mem
issues and async delegates and other IO (disk, etc). If 1700 is around max,
then I would not feel real sure about pushing 1000 as that gets close, and
you may have other async stuff going on and the rest of mem and allocations
your program is doing. Not to mention other network programs the server
could be running - assuming we don't have 100% rule over the box for one
program. If you had to pick some number, it would probably be less then
1000 with some rounded down fudge factor for safety. That said, you end up
having to pick a max number and error on the safe side. So if you settle on
700, but you need 1000-10,0000+ max connections, the socket collection with
event is the only .net/win32 way I see at this point without going to IOCPs.
(not assuming Indy for sake of discussion.)
And since Indy 10 has its own scheduler built in - its VERY efficient. Its
not been optimized yet but its been through some serious testing and will
push to 10,000+ and likely when done push to 40,000 or more (the socket
limit of Windows) on a machine with enough RAM to allocate sockets. So in
Indy 10 - the limit now is Windows and how many sockets it can allocate,
not the threads.


Cool. Thanks Chad.

--wjs

Nov 15 '05 #37

"Chad Z. Hower aka Kudzu" <cp**@hower.org > wrote in message
news:Xn******** **********@127. 0.0.1...
"William Stacey [MVP]" <st***********@ mvps.org> wrote in
news:#u******** ******@TK2MSFTN GP11.phx.gbl:
up and post some numbers. As ~1700 seems to be max (without hardly


Yes it is becuase of process limits. Each thread is allocated 2M of
process
space, and in a 32 bit space 4G is the limit. So thats 2000, but a process
already has allocated space... so 1700 is about right.


User space is 2GB (half of the 4GB process space) or 3GB on
"LargeAddressAw are" enabled systems (3GB switch), default stack space is 1MB
per OS thread, .NET doesn't expose a managed way to create threads with less
stack space, running XP and higher, one can allways call CreateThread using
PInvoke.
The default Stackspace can be changed using EDITBIN.EXE.

Willy.

Nov 15 '05 #38
"Willy Denoyette [MVP]" <wi************ *@pandora.be> wrote in
news:Os******** ******@TK2MSFTN GP10.phx.gbl:
User space is 2GB (half of the 4GB process space) or 3GB on
"LargeAddressAw are" enabled systems (3GB switch), default stack space is
Aah yes. Sorry you are right on the 1M and 2G. Was late last night. ;)
1MB per OS thread, .NET doesn't expose a managed way to create threads
This is a shame. :(
The default Stackspace can be changed using EDITBIN.EXE.


EditBin? You mean as in editing the .net framework?
--
Chad Z. Hower (a.k.a. Kudzu) - http://www.hower.org/Kudzu/
"Programmin g is an art form that fights back"
Nov 15 '05 #39
Chad Z. Hower aka Kudzu <cp**@hower.org > wrote:
The default Stackspace can be changed using EDITBIN.EXE.


EditBin? You mean as in editing the .net framework?


No - editing the assembly, which is still just a PE file after all. I
believe it can be done, but it's not recommended :)

--
Jon Skeet - <sk***@pobox.co m>
http://www.pobox.com/~skeet
If replying to the group, please do not mail me too
Nov 15 '05 #40

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

6
3488
by: ... | last post by:
Does anyone know a good tutorial on asynchronous programming in .net AsyncCallback And IASyncResult are driving me crazy. And the msdn documentation is not really helpful on this topic I appreciate any recommendation.
4
1571
by: Chris | last post by:
Hello, With asynchronous programming : Why does the callback-function (running in a worker thread) may not update the state of a control on the main-form ? The docs say that you must use a MethodInvoker instead as in following example :
9
8679
by: Michael Lindsey | last post by:
I need to write a server app to send images to client GUIs that are outside of the server's domain. The client will have the file system path to the image but can not access the file system. I am trying to decide if I should use remoting vs. writing a server that uses networkstreams. I have read that networkstreams\tcp programming should be faster than remoting and is a better choice for what I am doing but that it is difficult to code.
4
348
by: bernardpace | last post by:
Hi, I am trying to get more familiar with asynchronous programming. I was reading through the document found on the page: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpovrasynchronousprogrammingoverview.asp Now, I read that 'Always call EndInvoke after your asynchronous call completes'.
1
1559
by: Julian Hershel | last post by:
Reading about asynchronous programming (ms-help://MS.NETFrameworkSDK/cpguidenf/html/cpconasynchronousdesignpatterno verview.htm) I could not clarify some doubts. Hope you can help me. 1) Are asynchronous programming and multithreaded programming two different pictures? As I read the help topic above it is not clear to me if the design pattern opens a new thread or not to run the methods asynchronously. 2) One unique thread can run...
1
3176
by: org | last post by:
Hi, I'm developing a web service with should be used by an .NET CF2 client and an .NET 2.0 Windows client. I've tried to put all the connection logic into one class, which could be used in common from the mobile and the windows client. But this didn't work: The new .NET framework supports asynchronous web services with the "MethodnameCompleted+=new MethodNameEventHandler pattern, but the "old style" .NET 1 pattern used in the compact...
5
2304
by: Ryan Liu | last post by:
Hi, I read Microsoft SDK, ms-help://MS.NETFrameworkSDKv1.1/cpguidenf/html/cpovrasynchronousprogramming overview.htm there are 4 ways to call EndInvoke: The code in this topic demonstrates four common ways to use BeginInvoke and EndInvoke to make asynchronous calls. After calling BeginInvoke you can:
3
2102
by: =?Utf-8?B?bWs=?= | last post by:
Hi everyone, I need to refactor some of our processes using the asynchronous programming model. I have defined a couple of arrays of delegates to pipline the asynchronous invocations through different stages of execution. However I was wondering if there was any information available regarding the limitations of the asynchronous model, in particular maximum numbers of asynchronous elements, and limitations of multiple requests potentially...
3
1539
by: senfo | last post by:
I recently read an MSDN article by Jeff Prosise titled, Scalable Apps with Asynchronous Programming in ASP.NET (http://msdn.microsoft.com/msdnmag/issues/07/03/WickedCode/). In the article, Jeff discusses scaling problems that some users experience with ASP.NET applications. The problem, Jeff writes, isn't that ASP.NET isn't capable of scaling; but has more to do with ASP.NET applications that use threads inefficiently. In the article,...
2
1463
by: =?Utf-8?B?U3JpcmFtIE1hbGxhanlvc3VsYQ==?= | last post by:
Hi, I was going through the article (http://msdn.microsoft.com/msdnmag/issues/05/10/WickedCode/) regarding async programming in ASP.Net 2.0 but did not find much of an use with it. Actually my requirement is that once a user logs in I need to call a web service which will perform some activity but I am not bothered with the result of the web service. I have a process.aspx which is called after login and after implementing the code...
0
10834
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers, it seems that the internal comparison operator "<=>" tries to promote arguments from unsigned to signed. This is as boiled down as I can make it. Here is my compilation command: g++-12 -std=c++20 -Wnarrowing bit_field.cpp Here is the code in...
0
10541
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven tapestry of website design and digital marketing. It's not merely about having a website; it's about crafting an immersive digital experience that captivates audiences and drives business growth. The Art of Business Website Design Your website is...
0
10248
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each protocol has its own unique characteristics and advantages, but as a user who is planning to build a smart home system, I am a bit confused by the choice of these technologies. I'm particularly interested in Zigbee because I've heard it does some...
1
7782
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new presenter, Adolph Dupré who will be discussing some powerful techniques for using class modules. He will explain when you may want to use classes instead of User Defined Types (UDT). For example, to manage the data in unbound forms. Adolph will...
0
6976
by: conductexam | last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and then checking html paragraph one by one. At the time of converting from word file to html my equations which are in the word document file was convert into image. Globals.ThisAddIn.Application.ActiveDocument.Select();...
0
5817
by: adsilva | last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?
1
4446
by: 6302768590 | last post by:
Hai team i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated we have to send another system
2
4006
muto222
by: muto222 | last post by:
How can i add a mobile payment intergratation into php mysql website.
3
3108
bsmnconsultancy
by: bsmnconsultancy | last post by:
In today's digital era, a well-designed website is crucial for businesses looking to succeed. Whether you're a small business owner or a large corporation in Toronto, having a strong online presence can significantly impact your brand's success. BSMN Consultancy, a leader in Website Development in Toronto offers valuable insights into creating effective websites that not only look great but also perform exceptionally well. In this comprehensive...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.