473,507 Members | 3,112 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

Thread Logic Question

All,

I have a UI form calling a class object that contains a timer that
routinely draws intensive information to the screen (~30 fps). The
drawing is invoked on the main UI thread. I need the user to be able
to interact with the UI while the drawing is happening (dynamically
change drawing properties). Since the drawing is happening on the main
UI thread, the UI form doesn't receive the user control events
consistently (if at all).

Does anyone have some suggestions on how to model this scenario so that
I can receive events on the UI form but continue to draw? How would I
tackle this in C#? Thanks.

Sep 26 '06 #1
13 1581
Hi Jordan,

For one thing you could try using the clip rectangle to update only a single portion of the display at a time. When you Invalidate
the display only invalidate specific regions that have become "dirty".

I would also try to come up with the most effecient drawing code that you can.

Another option might be to just use Managed DirectX.

--
Dave Sexton

"Jordan" <jo***********@gmail.comwrote in message news:11**********************@h48g2000cwc.googlegr oups.com...
All,

I have a UI form calling a class object that contains a timer that
routinely draws intensive information to the screen (~30 fps). The
drawing is invoked on the main UI thread. I need the user to be able
to interact with the UI while the drawing is happening (dynamically
change drawing properties). Since the drawing is happening on the main
UI thread, the UI form doesn't receive the user control events
consistently (if at all).

Does anyone have some suggestions on how to model this scenario so that
I can receive events on the UI form but continue to draw? How would I
tackle this in C#? Thanks.

Sep 26 '06 #2
Jordan,

My guess is that you make one call to a method in your main form which
then does all the drawing logic.

What I would recommend is breaking up that method, if possible, into
smaller parts, and then calling each of those, so that you can have some
responsiveness to your app.

Hope this helps.

--
- Nicholas Paldino [.NET/C# MVP]
- mv*@spam.guard.caspershouse.com

"Jordan" <jo***********@gmail.comwrote in message
news:11**********************@h48g2000cwc.googlegr oups.com...
All,

I have a UI form calling a class object that contains a timer that
routinely draws intensive information to the screen (~30 fps). The
drawing is invoked on the main UI thread. I need the user to be able
to interact with the UI while the drawing is happening (dynamically
change drawing properties). Since the drawing is happening on the main
UI thread, the UI form doesn't receive the user control events
consistently (if at all).

Does anyone have some suggestions on how to model this scenario so that
I can receive events on the UI form but continue to draw? How would I
tackle this in C#? Thanks.

Sep 26 '06 #3
Dave,

Thanks for your response. I'm using managed OpenGL to handle the
drawing so the entire screen is being updated. I'm actually writing an
extension to an OpenGL app so my control over the rendering context is
limited.
Dave Sexton wrote:
Hi Jordan,

For one thing you could try using the clip rectangle to update only a single portion of the display at a time. When you Invalidate
the display only invalidate specific regions that have become "dirty".

I would also try to come up with the most effecient drawing code that you can.

Another option might be to just use Managed DirectX.

--
Dave Sexton

"Jordan" <jo***********@gmail.comwrote in message news:11**********************@h48g2000cwc.googlegr oups.com...
All,

I have a UI form calling a class object that contains a timer that
routinely draws intensive information to the screen (~30 fps). The
drawing is invoked on the main UI thread. I need the user to be able
to interact with the UI while the drawing is happening (dynamically
change drawing properties). Since the drawing is happening on the main
UI thread, the UI form doesn't receive the user control events
consistently (if at all).

Does anyone have some suggestions on how to model this scenario so that
I can receive events on the UI form but continue to draw? How would I
tackle this in C#? Thanks.
Sep 26 '06 #4
Nicholas,

This is "kind of" true. The form contains a class that contains a
timer. The timer fires approximately 30 fps in which a call is made to
refresh the display. I then perform the drawing in the contained class
in response to the event. The form is quiescent until the timer is
fired.

Does breaking up C# code into smaller functions allow events to be
delegated between method calls (even if it is on the same thread)?

Nicholas Paldino [.NET/C# MVP] wrote:
Jordan,

My guess is that you make one call to a method in your main form which
then does all the drawing logic.

What I would recommend is breaking up that method, if possible, into
smaller parts, and then calling each of those, so that you can have some
responsiveness to your app.

Hope this helps.

--
- Nicholas Paldino [.NET/C# MVP]
- mv*@spam.guard.caspershouse.com

"Jordan" <jo***********@gmail.comwrote in message
news:11**********************@h48g2000cwc.googlegr oups.com...
All,

I have a UI form calling a class object that contains a timer that
routinely draws intensive information to the screen (~30 fps). The
drawing is invoked on the main UI thread. I need the user to be able
to interact with the UI while the drawing is happening (dynamically
change drawing properties). Since the drawing is happening on the main
UI thread, the UI form doesn't receive the user control events
consistently (if at all).

Does anyone have some suggestions on how to model this scenario so that
I can receive events on the UI form but continue to draw? How would I
tackle this in C#? Thanks.
Sep 26 '06 #5
"Jordan" <jo***********@gmail.comwrote in message
news:11**********************@m7g2000cwm.googlegro ups.com...
Nicholas,

This is "kind of" true. The form contains a class that contains a
timer. The timer fires approximately 30 fps in which a call is made to
refresh the display. I then perform the drawing in the contained class
in response to the event. The form is quiescent until the timer is
fired.

Does breaking up C# code into smaller functions allow events to be
delegated between method calls (even if it is on the same thread)?
I think he's suggesting that by doing that, you can explicitly allow for
more moments in time in which your UI can handle events.

It sounds as though it may be that your rendering does not actually itself
interact with your form. Is that true? That is, it doesn't need access to
anything in the form itself?

If so, then it seems to me that a better solution would be to put the
rendering in its own thread, on a loop throttled using a wait object (eg
event handle) with a timeout. You would calculate the timeout based on the
current time and the next actual time you need to do some work. Then the
thread would block unless that timeout expired, or some other thread
signaled your wait object. Then the main thread with the UI can respond to
user input, modifying whatever state is relevant as a result and signaling
the wait object on the other thread. When the rendering thread wakes up, it
can then process that user input as necessary and render if necessary.

If the rendering thread need not actually do anything immediately in
response to user input, you could even just forego signalling it from the
main thread, and instead just synchronize access to whatever shared data
moves user input information from the main thread to the rendering thread
(which you need to do regardless). You would still use a wait object (so
that the thread can easily be woken up for the purpose of exiting) and a
timeout (to ensure that rendering only happens every 33ms)...the main thread
just wouldn't bother signaling the rendering thread just for user input.

It's hard to say exactly what the right approach is without knowing
precisely what you're doing, but the above is a common enough technique for
decoupling user input from rendering performance.

Pete
Sep 26 '06 #6
Peter,

I'm not entirely sure it is safe to do drawing in a thread when using
OpenGL. OpenGL is a state machine and not thread safe. You are
correct in that my form does not draw to itself but another device
context. However, the architecture of our system forces all drawing to
be invoked on the UI thread (trying to modify this behavior results in
evil voodoo).

Additionally, C# does not provide access to data members that were
created in a different thread. I'm thinking the best thing in this
case is going to be to make my drawing as skinny as possible. I've
re-worked a lot of the code, and the issue seems to have gone away.

Thanks all for your insightfull comments! This gives me a much better
understanding of how UI and threading interface.

Peter Duniho wrote:
"Jordan" <jo***********@gmail.comwrote in message
news:11**********************@m7g2000cwm.googlegro ups.com...
Nicholas,

This is "kind of" true. The form contains a class that contains a
timer. The timer fires approximately 30 fps in which a call is made to
refresh the display. I then perform the drawing in the contained class
in response to the event. The form is quiescent until the timer is
fired.

Does breaking up C# code into smaller functions allow events to be
delegated between method calls (even if it is on the same thread)?

I think he's suggesting that by doing that, you can explicitly allow for
more moments in time in which your UI can handle events.

It sounds as though it may be that your rendering does not actually itself
interact with your form. Is that true? That is, it doesn't need access to
anything in the form itself?

If so, then it seems to me that a better solution would be to put the
rendering in its own thread, on a loop throttled using a wait object (eg
event handle) with a timeout. You would calculate the timeout based on the
current time and the next actual time you need to do some work. Then the
thread would block unless that timeout expired, or some other thread
signaled your wait object. Then the main thread with the UI can respond to
user input, modifying whatever state is relevant as a result and signaling
the wait object on the other thread. When the rendering thread wakes up, it
can then process that user input as necessary and render if necessary.

If the rendering thread need not actually do anything immediately in
response to user input, you could even just forego signalling it from the
main thread, and instead just synchronize access to whatever shared data
moves user input information from the main thread to the rendering thread
(which you need to do regardless). You would still use a wait object (so
that the thread can easily be woken up for the purpose of exiting) and a
timeout (to ensure that rendering only happens every 33ms)...the main thread
just wouldn't bother signaling the rendering thread just for user input.

It's hard to say exactly what the right approach is without knowing
precisely what you're doing, but the above is a common enough technique for
decoupling user input from rendering performance.

Pete
Sep 26 '06 #7
Jordan,

See inline:
I'm not entirely sure it is safe to do drawing in a thread when using
OpenGL. OpenGL is a state machine and not thread safe. You are
correct in that my form does not draw to itself but another device
context. However, the architecture of our system forces all drawing to
be invoked on the UI thread (trying to modify this behavior results in
evil voodoo).
Well, you are supposed to do all drawing operations in the UI thread.
Additionally, C# does not provide access to data members that were
created in a different thread.
This isn't true. You can access anything you want in separate threads,
you just have to make sure that the method that is called as the thread
routine has access to them. Protecting those fields from accesses from
different threads is another story though.
I'm thinking the best thing in this
case is going to be to make my drawing as skinny as possible. I've
re-worked a lot of the code, and the issue seems to have gone away.
That was the general idea. I recommended breaking it up into smaller
pieces so that the message pump could eventually pump messages corresponding
to your input, and give it a chance to respond.
--
- Nicholas Paldino [.NET/C# MVP]
- mv*@spam.guard.caspershouse.com
>
Thanks all for your insightfull comments! This gives me a much better
understanding of how UI and threading interface.

Peter Duniho wrote:
>"Jordan" <jo***********@gmail.comwrote in message
news:11**********************@m7g2000cwm.googlegr oups.com...
Nicholas,

This is "kind of" true. The form contains a class that contains a
timer. The timer fires approximately 30 fps in which a call is made to
refresh the display. I then perform the drawing in the contained class
in response to the event. The form is quiescent until the timer is
fired.

Does breaking up C# code into smaller functions allow events to be
delegated between method calls (even if it is on the same thread)?

I think he's suggesting that by doing that, you can explicitly allow for
more moments in time in which your UI can handle events.

It sounds as though it may be that your rendering does not actually
itself
interact with your form. Is that true? That is, it doesn't need access
to
anything in the form itself?

If so, then it seems to me that a better solution would be to put the
rendering in its own thread, on a loop throttled using a wait object (eg
event handle) with a timeout. You would calculate the timeout based on
the
current time and the next actual time you need to do some work. Then the
thread would block unless that timeout expired, or some other thread
signaled your wait object. Then the main thread with the UI can respond
to
user input, modifying whatever state is relevant as a result and
signaling
the wait object on the other thread. When the rendering thread wakes up,
it
can then process that user input as necessary and render if necessary.

If the rendering thread need not actually do anything immediately in
response to user input, you could even just forego signalling it from the
main thread, and instead just synchronize access to whatever shared data
moves user input information from the main thread to the rendering thread
(which you need to do regardless). You would still use a wait object (so
that the thread can easily be woken up for the purpose of exiting) and a
timeout (to ensure that rendering only happens every 33ms)...the main
thread
just wouldn't bother signaling the rendering thread just for user input.

It's hard to say exactly what the right approach is without knowing
precisely what you're doing, but the above is a common enough technique
for
decoupling user input from rendering performance.

Pete

Sep 26 '06 #8
Cool! Sounds good. Thanks.

Nicholas Paldino [.NET/C# MVP] wrote:
Jordan,

See inline:
I'm not entirely sure it is safe to do drawing in a thread when using
OpenGL. OpenGL is a state machine and not thread safe. You are
correct in that my form does not draw to itself but another device
context. However, the architecture of our system forces all drawing to
be invoked on the UI thread (trying to modify this behavior results in
evil voodoo).

Well, you are supposed to do all drawing operations in the UI thread.
Additionally, C# does not provide access to data members that were
created in a different thread.

This isn't true. You can access anything you want in separate threads,
you just have to make sure that the method that is called as the thread
routine has access to them. Protecting those fields from accesses from
different threads is another story though.
I'm thinking the best thing in this
case is going to be to make my drawing as skinny as possible. I've
re-worked a lot of the code, and the issue seems to have gone away.

That was the general idea. I recommended breaking it up into smaller
pieces so that the message pump could eventually pump messages corresponding
to your input, and give it a chance to respond.
--
- Nicholas Paldino [.NET/C# MVP]
- mv*@spam.guard.caspershouse.com

Thanks all for your insightfull comments! This gives me a much better
understanding of how UI and threading interface.

Peter Duniho wrote:
"Jordan" <jo***********@gmail.comwrote in message
news:11**********************@m7g2000cwm.googlegro ups.com...
Nicholas,

This is "kind of" true. The form contains a class that contains a
timer. The timer fires approximately 30 fps in which a call is made to
refresh the display. I then perform the drawing in the contained class
in response to the event. The form is quiescent until the timer is
fired.

Does breaking up C# code into smaller functions allow events to be
delegated between method calls (even if it is on the same thread)?

I think he's suggesting that by doing that, you can explicitly allow for
more moments in time in which your UI can handle events.

It sounds as though it may be that your rendering does not actually
itself
interact with your form. Is that true? That is, it doesn't need access
to
anything in the form itself?

If so, then it seems to me that a better solution would be to put the
rendering in its own thread, on a loop throttled using a wait object (eg
event handle) with a timeout. You would calculate the timeout based on
the
current time and the next actual time you need to do some work. Then the
thread would block unless that timeout expired, or some other thread
signaled your wait object. Then the main thread with the UI can respond
to
user input, modifying whatever state is relevant as a result and
signaling
the wait object on the other thread. When the rendering thread wakes up,
it
can then process that user input as necessary and render if necessary.

If the rendering thread need not actually do anything immediately in
response to user input, you could even just forego signalling it from the
main thread, and instead just synchronize access to whatever shared data
moves user input information from the main thread to the rendering thread
(which you need to do regardless). You would still use a wait object (so
that the thread can easily be woken up for the purpose of exiting) and a
timeout (to ensure that rendering only happens every 33ms)...the main
thread
just wouldn't bother signaling the rendering thread just for user input.

It's hard to say exactly what the right approach is without knowing
precisely what you're doing, but the above is a common enough technique
for
decoupling user input from rendering performance.

Pete
Sep 26 '06 #9
"Jordan" <jo***********@gmail.comwrote in message
news:11**********************@m73g2000cwd.googlegr oups.com...
I'm not entirely sure it is safe to do drawing in a thread when using
OpenGL. OpenGL is a state machine and not thread safe.
I've seen comments like this before here, and I think it bears clarification
that there's no such thing as either doing something in a thread or not
doing something in a thread.

Everything your program does, it does in a thread. You may only have a
single thread, but there is still a thread. A corollary to this is that you
can do anything you want, in any thread, as long as what you're doing is
completely isolated to that thread.

In the case of interaction with a form, since the form is owned by a thread,
and all Window messages for that form have to be processed on that thread,
it's not possible to isolate drawing that the form does in a way that allows
it to happen on another thread. But that doesn't mean that graphics
rendering in general can't happen on another thread. If there's an API that
allows for rendering without interaction with the form (or some other
Windows object that's owned by the form's owning thread), that can happen on
a different thread.
You are
correct in that my form does not draw to itself but another device
context. However, the architecture of our system forces all drawing to
be invoked on the UI thread (trying to modify this behavior results in
evil voodoo).
Okay...absent posted code, and in light of the fact that I don't know how
OpenGL support works, I'll take your word that you cannot separate OpenGL
rendering from the stuff that goes on in the form's owning thread.
Additionally, C# does not provide access to data members that were
created in a different thread.
As Nicholas says, that's incorrect.
I'm thinking the best thing in this
case is going to be to make my drawing as skinny as possible. I've
re-worked a lot of the code, and the issue seems to have gone away.
Glad to hear you've got a solution that works for you.

Pete
Sep 26 '06 #10
Hi Jordan,

Unless you're using the System.Windows.Forms.Timer or explicitly marshaling the timer calls to the UI thread, your drawing code is
probably executing on a thread other than the UI thread.

I only mention this because you never said which type of Timer you're using and you seemed to imply that breaking up the drawing
function into multiple methods has helped, which leads me to believe that you're executing that code on a different thread to begin
with. This is contrary to your statement, "the architecture of our system forces all drawing to be invoked on the UI thread".

HTH

--
Dave Sexton

"Jordan" <jo***********@gmail.comwrote in message news:11**********************@h48g2000cwc.googlegr oups.com...
All,

I have a UI form calling a class object that contains a timer that
routinely draws intensive information to the screen (~30 fps). The
drawing is invoked on the main UI thread. I need the user to be able
to interact with the UI while the drawing is happening (dynamically
change drawing properties). Since the drawing is happening on the main
UI thread, the UI form doesn't receive the user control events
consistently (if at all).

Does anyone have some suggestions on how to model this scenario so that
I can receive events on the UI form but continue to draw? How would I
tackle this in C#? Thanks.

Sep 26 '06 #11
Dave,

No, it is drawing in the main UI thread. Here is what happens:

1) Class uses server timer (System.Timers.Timer)
2) Timer elapsed - call to RedrawViewers
3) Internally, RedrawViewers invokes to the main UI thread
4) Main UI thread handles OnAfterDraw event and paints to screen

What I did was make the painting more efficient and lower the FPS timer
rate (if I jump to 60 fps, it gets messy again).

Dave Sexton wrote:
Hi Jordan,

Unless you're using the System.Windows.Forms.Timer or explicitly marshaling the timer calls to the UI thread, your drawing code is
probably executing on a thread other than the UI thread.

I only mention this because you never said which type of Timer you're using and you seemed to imply that breaking up the drawing
function into multiple methods has helped, which leads me to believe that you're executing that code on a different thread to begin
with. This is contrary to your statement, "the architecture of our system forces all drawing to be invoked on the UI thread".

HTH

--
Dave Sexton

"Jordan" <jo***********@gmail.comwrote in message news:11**********************@h48g2000cwc.googlegr oups.com...
All,

I have a UI form calling a class object that contains a timer that
routinely draws intensive information to the screen (~30 fps). The
drawing is invoked on the main UI thread. I need the user to be able
to interact with the UI while the drawing is happening (dynamically
change drawing properties). Since the drawing is happening on the main
UI thread, the UI form doesn't receive the user control events
consistently (if at all).

Does anyone have some suggestions on how to model this scenario so that
I can receive events on the UI form but continue to draw? How would I
tackle this in C#? Thanks.
Sep 26 '06 #12
Hi Jordan,

Sorry I doubted you!

It all sounds good to me.

--
Dave Sexton

"Jordan" <jo***********@gmail.comwrote in message news:11**********************@b28g2000cwb.googlegr oups.com...
Dave,

No, it is drawing in the main UI thread. Here is what happens:

1) Class uses server timer (System.Timers.Timer)
2) Timer elapsed - call to RedrawViewers
3) Internally, RedrawViewers invokes to the main UI thread
4) Main UI thread handles OnAfterDraw event and paints to screen

What I did was make the painting more efficient and lower the FPS timer
rate (if I jump to 60 fps, it gets messy again).

Dave Sexton wrote:
>Hi Jordan,

Unless you're using the System.Windows.Forms.Timer or explicitly marshaling the timer calls to the UI thread, your drawing code
is
probably executing on a thread other than the UI thread.

I only mention this because you never said which type of Timer you're using and you seemed to imply that breaking up the drawing
function into multiple methods has helped, which leads me to believe that you're executing that code on a different thread to
begin
with. This is contrary to your statement, "the architecture of our system forces all drawing to be invoked on the UI thread".

HTH

--
Dave Sexton

"Jordan" <jo***********@gmail.comwrote in message news:11**********************@h48g2000cwc.googlegr oups.com...
All,

I have a UI form calling a class object that contains a timer that
routinely draws intensive information to the screen (~30 fps). The
drawing is invoked on the main UI thread. I need the user to be able
to interact with the UI while the drawing is happening (dynamically
change drawing properties). Since the drawing is happening on the main
UI thread, the UI form doesn't receive the user control events
consistently (if at all).

Does anyone have some suggestions on how to model this scenario so that
I can receive events on the UI form but continue to draw? How would I
tackle this in C#? Thanks.

Sep 26 '06 #13
No problems - thanks for the help.

Dave Sexton wrote:
Hi Jordan,

Sorry I doubted you!

It all sounds good to me.

--
Dave Sexton

"Jordan" <jo***********@gmail.comwrote in message news:11**********************@b28g2000cwb.googlegr oups.com...
Dave,

No, it is drawing in the main UI thread. Here is what happens:

1) Class uses server timer (System.Timers.Timer)
2) Timer elapsed - call to RedrawViewers
3) Internally, RedrawViewers invokes to the main UI thread
4) Main UI thread handles OnAfterDraw event and paints to screen

What I did was make the painting more efficient and lower the FPS timer
rate (if I jump to 60 fps, it gets messy again).

Dave Sexton wrote:
Hi Jordan,

Unless you're using the System.Windows.Forms.Timer or explicitly marshaling the timer calls to the UI thread, your drawing code
is
probably executing on a thread other than the UI thread.

I only mention this because you never said which type of Timer you're using and you seemed to imply that breaking up the drawing
function into multiple methods has helped, which leads me to believe that you're executing that code on a different thread to
begin
with. This is contrary to your statement, "the architecture of our system forces all drawing to be invoked on the UI thread".

HTH

--
Dave Sexton

"Jordan" <jo***********@gmail.comwrote in message news:11**********************@h48g2000cwc.googlegr oups.com...
All,

I have a UI form calling a class object that contains a timer that
routinely draws intensive information to the screen (~30 fps). The
drawing is invoked on the main UI thread. I need the user to be able
to interact with the UI while the drawing is happening (dynamically
change drawing properties). Since the drawing is happening on the main
UI thread, the UI form doesn't receive the user control events
consistently (if at all).

Does anyone have some suggestions on how to model this scenario so that
I can receive events on the UI form but continue to draw? How would I
tackle this in C#? Thanks.
Sep 26 '06 #14

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

Similar topics

31
2434
by: AlexeiOst | last post by:
Everywhere in documentation there are recommendations to use threads from thread pooling for relatively short tasks. As I understand, fetching a page or multiple pages (sometimes up to 50 but not...
8
3156
by: Maurice LING | last post by:
Hi, I just have a simple question about threads. My classes inherits from threading.Thread class. I am calling threading.Thread.run() method to spawn a few threads to parallel some parts of my...
4
1611
by: Simo | last post by:
hello, can anyone please tell me if the following structure is thread safe visit.cs class Visit : System.Web.UI.Page { //Variables IVisitProtocol m_oVisitProtocol public void...
5
14099
by: Rob R. Ainscough | last post by:
I'm using a BackgroundWorker to perform a file download from an ftp site. Per good code design practices where I separate my UI code from my core logic code (in this case my Download file method in...
27
1706
by: Ritesh Raj Sarraf | last post by:
Hi, I have some basic doubts about thread. I have a list which has items in it which need to be downloaded from the internet. Let's say list is: list_items which has 100 items in it.
2
1930
by: tshad | last post by:
I have a Service that starts a thread that never ends. When I stop the service from the Service Applet, does it kill the thread or do I need to do it myself? If it isn't killed, what happens...
5
3010
by: temp2 | last post by:
Hello, I have an app that reads data params from a stream and updates controls accordingly. The stream reader is on a different thread than the main thread that created the controls. I fully...
5
6011
by: salberts | last post by:
Hi, I am writing an application that has its UI and Logic layers. My initial idea was to launch the two layers on two different threads and manage calls made by the UI to the Logic manually....
11
3746
by: Jon Slaughter | last post by:
Is there any way to start a terminated thread without using a pool or creating a new thread object? void counter() { clicks = 0; clock.Start(); while (counterActive) { clicks++;
0
7109
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
0
7313
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,...
0
7372
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...
0
7481
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...
1
5039
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...
0
4702
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...
0
3190
by: TSSRALBI | last post by:
Hello I'm a network technician in training and I need your help. I am currently learning how to create and manage the different types of VPNs and I have a question about LAN-to-LAN VPNs. The...
0
3179
by: adsilva | last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?
1
758
muto222
by: muto222 | last post by:
How can i add a mobile payment intergratation into php mysql website.

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.