Application.Run and Windows Service (Multithreaded)

  • Thread starter Thread starter Jake K
  • Start date Start date
J

Jake K

I have a multithreaded application that I now want to convert into a Windows
Service. Does application.run work in a windows service? Are there things
to take into consideration when creating a multithreaded windows service as
opposed to a multithreaded windows forms application?


E.G.

namespace whatever
{
public partial class Form1 : Form
{
....
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
SomeArray = new SomeClass[# - #];

for (...)
{
...
...
ThreadStart ts = new ThreadStart(SomeClass.SomeMethod);
Thread wrkThread = new Thread(ts);
whatever.CurrentThread = wrkThread;
wrkThread.SetApartmentState(ApartmentState.STA);
wrkThread.Start();
}
return;

}
}
public class SomeClass
{
// ...
// ...
private void SomeMethod()
{
....
....
Application.Run();
}
}
}
 
I have a multithreaded application that I now want to convert into a Windows
Service. Does application.run work in a windows service?

Why are you considering calling it? Windows services don't have UI so
there's probably no point in doing so.


Mattias
 
No is the short answer, the main class inherits from
System.ServiceProcess.ServiceBase and ServiceBase has a Run method.
The easiest way to see how it works is to create a service from the
Windows Service template in VS, if you don't have that, I can knock you
up an empty service that shows the basics.
 
Oh I should add, threading is simpler in a service as there's no GUI so
no BeginInvoke calls, however you do need to manage the process of the
servicebase receiving a Stop message. I've got a service or two here
which are multithreaded, I use ManualResetEvents to manage the thread
shutdown.
No is the short answer, the main class inherits from
System.ServiceProcess.ServiceBase and ServiceBase has a Run method.
The easiest way to see how it works is to create a service from the
Windows Service template in VS, if you don't have that, I can knock you
up an empty service that shows the basics.

Jake said:
I have a multithreaded application that I now want to convert into a Windows
Service. Does application.run work in a windows service? Are there things
to take into consideration when creating a multithreaded windows service as
opposed to a multithreaded windows forms application?


E.G.

namespace whatever
{
public partial class Form1 : Form
{
...
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
SomeArray = new SomeClass[# - #];

for (...)
{
...
...
ThreadStart ts = new ThreadStart(SomeClass.SomeMethod);
Thread wrkThread = new Thread(ts);
whatever.CurrentThread = wrkThread;
wrkThread.SetApartmentState(ApartmentState.STA);
wrkThread.Start();
}
return;

}
}
public class SomeClass
{
// ...
// ...
private void SomeMethod()
{
...
...
Application.Run();
}
}
}
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Back
Top