|
Hi!! I've made an application with WinForm C#. How can I change it to application Sercvice. Thanks
|
|
|
|
|
Depends.
Services and Apps are very different beasties: services do not have a UI, WinForms apps do.
What is your app doing, and why do you want it as a service?
Sent from my Amstrad PC 1640
Never throw anything away, Griff
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
App which get CPU Temperature and Windows config.
|
|
|
|
|
Please, stop trying to type the absolute bare minimum, or we will be here all day!
Remember that we can't see your screen, access your HDD, or read your mind - we only get exactly what you type to work with. And the better the information you give us, the better help we can give you.
So what does this app do with the info?
What should the service do with it?
What problems are you having in converting it?
What help do you need?
Sent from my Amstrad PC 1640
Never throw anything away, Griff
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
ok ok... So, I've build an apps to get my computer Configuration and its Temperature.
My question is : How to convert windows application to windows service c# ?.. thanks
|
|
|
|
|
So, the "all day" option it is then ...
Just saying the same thing over again in bigger letters doesn't make it more informative - it makes it more annoying, but does not increase the overall level of information. And annoying the people you want help from probably isn't the best way to go in life.
Read what I said again:
Quote: Please, stop trying to type the absolute bare minimum, or we will be here all day!
Remember that we can't see your screen, access your HDD, or read your mind - we only get exactly what you type to work with. And the better the information you give us, the better help we can give you.
So what does this app do with the info?
What should the service do with it?
What problems are you having in converting it?
What help do you need?
So what does the app do with the info?
1) Store it in a database?
2) Etch it on stone tablets and pass it down the mountain?
3) Strap it to the legs of pigeons and send it to your auntie?
4) Display it to the user in a neat and tidy way so he can understand what is going on in his computer?
5) Something else entirely?
Sent from my Amstrad PC 1640
Never throw anything away, Griff
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
wrote: How to convert windows application to windows service c# I will answer the narrowest part of your question. Unless you're running on an old version of Windows, you cannot convert a UI based application into a windows service. A service is expected to have no user interface.
What you can do is extract the core logic that relates to the none UI part and host that as a DLL inside a service. If you need to communicate with a forms or WPF application you need to set up some form of communications protocol between the two. TCP is a popular choice.
This space for rent
|
|
|
|
|
Services don't have a UI, so turning your app into a service isn't possible or feasible.
Usually, people start out writing a service, and make it compilable as a command line app to test is without having to continually install/uninstall a service (not to mention avoiding the slightly more tedious nature of debugging a Windows service).
".45 ACP - because shooting twice is just silly" - JSOP, 2010 ----- You can never have too much ammo - unless you're swimming, or on fire. - JSOP, 2010 ----- When you pry the gun from my cold dead hands, be careful - the barrel will be very hot. - JSOP, 2013
|
|
|
|
|
I need help with breaking my algorithm into modules. The reason why is because the following code at the moment is essentially duplicated three times for each calculate button on my GUI Windows Forms Application. I was wondering if I break it down in to sub-routines this can be done? Can anyone help me with this?
public void park1()
{
string allotedTime = txtTimeLimit1.Text;
string startTime = txtEntryTime1.Text;
string endTime = txtExitTime1.Text;
if (String.IsNullOrEmpty(allotedTime) || String.IsNullOrEmpty(startTime) || String.IsNullOrEmpty(endTime))
{
MessageBox.Show("Enter all time values");
}
else
{
TimeSpan alloted = TimeSpan.Parse(allotedTime);
DateTime start = DateTime.Parse(startTime);
DateTime end = DateTime.Parse(endTime);
if (start > end)
end = end.AddDays(1);
TimeSpan duration = end.Subtract(start);
//If the start time is greater than end that means the diff is above 12 hours
//So subtracting the hours from a day to get the number of hours used if (TimeSpan.Compare(alloted, duration) == -1)
if (TimeSpan.Compare(alloted, duration) == -1)
{
overTime1++;
}
completeTime1++;
lblOverTime1.Text = "" + overTime1;
int percentage = (overTime1 * 100) / completeTime1;
lblOverTimePercentage1.Text = "" + percentage;
if (percentage > 50)
{
warnWarden();
}
}
}
|
|
|
|
|
Start by creating a seperate class (seperate from your GUI class) and pass the necessary data for the algortihm via or the constructor or via properties (or both).
The GUI should handle data validation input. Perhaps make the calculation buttons only available if the data is valid.
When the algorithm is finished it returns the result to the GUI who can display it.
Small pseudocode example.
function calculate(){
int n1, n2;
bool parse1 = int.TryParse(txt1.Text, out n1);
bool parse2 = int.TryParse(txt2.Text, out n2);
if(parse1 && parse2){
Calculator calc = new Calculator();
txt_sum.Text = calc.Add(n1, n2);
txt_substract.Text = calc.Substract(n1, n2);
}
}
function Add(int n1, int n2){
return n1 + n2;
}
function Substract(int n1, int n2){
return n1 - n2;
}
Of course this is a very quick and dirty pseudo code example, you'll need to work the rest out from there.
PS: If you want to do it properly move the calculations to some form of a business layer instead of just a seperate class.
Hope this helps.
|
|
|
|
|
Hey, I am also a programmer, so for that, I have some different thought, before taking any modulator you just take some class or integer and after you step by step you will do the code. For further about it
epson error code 0xf1 just visit with it.
|
|
|
|
|
0) Set the Tag property on each calc button to an appropriate (unique) integer index value, such as 1, 2, 3. etc
1) Set each calc button to use the same Click event handler
2) In the one-and-only Click event handler do something like this:
private void Calc_Click(object sender,...)
{
switch (Convert.ToInt32((Button)sender.Tag))
{
case 1 : MyCalcRoutine(1, txtTimeLimit1, txtEntryTime1, txtExitTime1); break;
case 2 : MyCalcRoutine(2, txtTimeLimit2, txtEntryTime2, txtExitTime2); break;
case 3 : MyCalcRoutine(3, txtTimeLimit3, txtEntryTime3, txtExitTime3); break;
}
}
And finally, your generic calculation routine.
private void MyCalcRoutine(int index, TextBox timeLimit, TextBox entryTime, TextBox exitTime)
{
string allotedTime = timeLimit.Text;
string startTime = entryTime.Text;
string endTime = exitTime;
if (String.IsNullOrEmpty(allotedTime) || String.IsNullOrEmpty(startTime) || String.IsNullOrEmpty(endTime))
{
MessageBox.Show("Enter all time values");
}
else
{
TimeSpan alloted = TimeSpan.Parse(allotedTime);
DateTime start = DateTime.Parse(startTime);
DateTime end = DateTime.Parse(endTime);
if (start > end)
{
end = end.AddDays(1);
}
TimeSpan duration = end.Subtract(start);
if (TimeSpan.Compare(alloted, duration) == -1)
{
overTime1++;
}
completeTime1++;
lblOverTime1.Text = "" + overTime1;
int percentage = (overTime1 * 100) / completeTime1;
lblOverTimePercentage1.Text = "" + percentage;
if (percentage > 50)
{
warnWarden();
}
}
}
".45 ACP - because shooting twice is just silly" - JSOP, 2010 ----- You can never have too much ammo - unless you're swimming, or on fire. - JSOP, 2010 ----- When you pry the gun from my cold dead hands, be careful - the barrel will be very hot. - JSOP, 2013
|
|
|
|
|
I'm not sure how far you got with breaking this down into a single algorithm, but here's what I got so far.
public class UIForm
{
public class TimeSet
{
private TextBox _txtAllottedTime;
private TextBox _txtStartTime;
private TextBox _txtEndTime;
public TimeSet(TextBox txtAllottedTime, TextBox txtStartTime, TextBox txtEndTime)
{
_txtAllottedTime = txtAllottedTime;
_txtStartTime = txtStartTime;
_txtEndTime = txtEndTime;
}
private string AllottedTime =>
_txtAllottedTime.Text;
private string StartTime =>
_txtStartTime.Text;
private string EndTime =>
_txtEndTime.Text;
public bool TextWasEnteredByUser =>
string.IsNullOrEmpty(AllottedTime) ||
string.IsNullOrEmpty(StartTime) ||
string.IsNullOrEmpty(EndTime);
}
public List<TimeSet> TimeSets
{
new TimeSet(txtTimeLimit1, txtEntryTime1, txtExitTime1),
new TimeSet(txtTimeLimit2, txtEntryTime2, txtExitTime2),
new TimeSet(txtTimeLimit3, txtEntryTime3, txtExitTime3)
};
public void park1()
{
park(TimeSets[0]);
}
public void park2()
{
park(TimeSets[1]);
}
public void park3()
{
park(TimeSets[2]);
}
public void park(TimeSet timeSet)
{
if (!timeSet.TextWasEnteredByUser)
{
MessageBox.Show("Enter all time values");
}
else
{
TimeSpan alloted = TimeSpan.Parse(timeSet.AllottedTime);
DateTime start = DateTime.Parse(timeSet.StartTime);
DateTime end = DateTime.Parse(timeSet.EndTime);
if (start > end)
end = end.AddDays(1);
TimeSpan duration = end.Subtract(start);
if (TimeSpan.Compare(alloted, duration) == -1)
{
overTime1++;
}
completeTime1++;
lblOverTime1.Text = "" + overTime1;
int percentage = (overTime1 * 100) / completeTime1;
lblOverTimePercentage1.Text = "" + percentage;
if (percentage > 50)
{
warnWarden();
}
}
}
}
I had to do some guessing, and as a forewarning, I obviously couldn't compile this code. However, what I am attempting to show you is that I created a subclass (one which should be in a separate file at this point), and this is handling one park# case at a time. I can initialize each TimeSet in a List<TimeSet> , and access a single instance of a TimeSet in a given park# call. This gives me the arguments I need. I then just call a single method, park , with all of the parameters I need in one object at the beginning.
Also, due to this cleanup, I can clean up that if statement to ask the object passed in one question, instead of calling string.IsNullOrEmpty() multiple times in one line. This makes the code a bit more readable.
You can continue on refactoring, because I do see there were a few other controls that you could add to the class, and frankly the rest of the else block could potentially be in this new class, cleaning up your UIForm code.
I would need a bit more context in order to be more thorough, but hopefully you see what I'm trying to do. Good luck.
|
|
|
|
|
It was late last night when I was coding that up, but I noticed a lot that could be broken down into that subclass. I also agree with earlier responses... some of this calculation logic could really be in another project altogether, separating the algorithm from the UI wiring. However, the original question asked how to make it modular... I believe that question has to do with the repetition in control logic. I assume the controls look like they're in a grid, having three columns or rows, each of which containing StartTimes, EndTimes, and the like. That's what the subclass was for.
I worked a lot more on the logic this morning, and this is what I have now:
public class UIForm
{
public class TimeSet
{
private TextBox _txtAllottedTime;
private TextBox _txtStartTime;
private TextBox _txtEndTime;
private Label _lblOverTime;
private Label _lblOverTimePercentage;
private int _overTime;
private int _completeTime;
public TimeSpan AllottedTime =>
TimeSpan.Parse(_txtAllottedTime.Text);
private DateTime StartTime =>
DateTime.Parse(_txtStartTime.Text);
private DateTime EndTime =>
DateTime.Parse(_txtEndTime.Text);
public TimeSet(
TextBox txtAllottedTime,
TextBox txtStartTime,
TextBox txtEndTime,
Label lblOverTime,
Label lblOverTimePercentage,
int overTime,
int completeTime)
{
_txtAllottedTime = txtAllottedTime;
_txtStartTime = txtStartTime;
_txtEndTime = txtEndTime;
_lblOverTime = lblOverTime;
_lblOverTimePercentage = lblOverTimePercentage;
OverTime = overTime;
_completeTime = completeTime;
}
public int OverTime
{
get => _overTime;
private set
{
_overTime = value;
_lblOverTime.Text = value.ToString();
}
}
public bool TextWasEnteredByUser =>
string.IsNullOrEmpty(AllottedTime.Text) ||
string.IsNullOrEmpty(StartTime.Text) ||
string.IsNullOrEmpty(EndTime.Text);
public TimeSpan Duration
{
get
{
DateTime end = EndTime;
if (StartTime > end)
{
end = end.AddDays(1);
}
return end.Subtract(StartTime);
}
}
private int Percentage
{
get
{
_completeTime++;
int percentage = (OverTime * 100) / _completeTime;
_lblOverTimePercentage.Text = percentage.ToString();
return percentage;
}
}
public bool ShouldWarnWarden() =>
(Percentage > 50);
public void CheckForOverTime()
{
if (TimeSpan.Compare(AllottedTime, Duration) == -1)
{
OverTime++;
}
}
}
private readonly List<TimeSet> TimeSets = new List<TimeSet>
{
new TimeSet(txtTimeLimit1, txtEntryTime1, txtExitTime1, lblOverTime1, _lblOverTimePercentage1, 0, 0),
new TimeSet(txtTimeLimit2, txtEntryTime2, txtExitTime2, lblOverTime2, _lblOverTimePercentage2, 0, 0),
new TimeSet(txtTimeLimit3, txtEntryTime3, txtExitTime3, lblOverTime3, _lblOverTimePercentage3, 0, 0)
};
public void park1() =>
park(TimeSets[0]);
public void park2() =>
park(TimeSets[1]);
public void park3() =>
park(TimeSets[2]);
private void park(TimeSet timeSet)
{
if (!timeSet.TextWasEnteredByUser)
{
MessageBox.Show("Enter all time values");
}
else
{
timeSet.CheckForOverTime();
if (timeSet.ShouldWarnWarden())
{
warnWarden();
}
}
}
}
So the idea is to break up that if/else block all the way down to a simple method, instead of having park() do all of the work. TimeSet does most of the heavy lifting, but in small chunks. It'd probably be easier to debug. But as others have stated, that percentage logic really should be in another layer altogether if you're making this a full blown program. Also if making this a full-blown program, I'd suggest making park() and its counterparts look like Park() as a matter of convention, just to keep new developers on the same page.
I hope that helps.
|
|
|
|
|
When i have a Tabpage with Imagelist:
Generated by this code:
ListView lstView = new ListView();
lstView.LargeImageList = ListaImagenes[indice];
lstView.Dock = DockStyle.Fill;
for (int j = 0; j < this.ListaImagenes[indice].Images.Count; j++)
{
ListViewItem item = new ListViewItem();
item.ImageIndex = j;
lstView.Items.Add(item);
}
TabPage tab = new TabPage(Procedimiento);
tab.Controls.Add(lstView);
this.ImagesTabControl.TabPages.Add(tab);
What is the code to obtain a list of images selected?
Thanks
|
|
|
|
|
Create a list of selected image indexes; add a SelectionChanged EventHandler to the ListView after you instantiate it.
List<int> SelectedImagesIndexes = new List<int>();
private void LstViewOnItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
{
int ndx = e.Item.ImageIndex;
if(ndx == -1) return;
bool inlist = SelectedImagesIndexes.Contains(ndx);
if (e.Item.Selected)
{
if (! inlist)
{
SelectedImagesIndexes.Add(ndx);
}
}
else
{
if (inlist)
{
SelectedImagesIndexes.Remove(ndx);
}
}
}
«Where is the Life we have lost in living? Where is the wisdom we have lost in knowledge? Where is the knowledge we have lost in information?» T. S. Elliot
|
|
|
|
|
Hi All,
I am new to C#,I have built a scanning application using C# in visual studio which scans images in black and white but I would like to add a comobox fpr colormode which has options such as Grayscale and color
Basically I am wanting to scan images in color How do I Implement it?
Thanks in Advance
I have used the following code
namespace WindowsApplication
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
ListScanners();
// Set start output folder TMP
textBox1.Text = Path.GetTempPath();
// Set JPEG as default
comboBox1.SelectedIndex = 1;
}
private void ListScanners()
{
// Clear the ListBox.
listBox1.Items.Clear();
// Create a DeviceManager instance
var deviceManager = new DeviceManager();
// Loop through the list of devices and add the name to the listbox
for (int i = 1; i <= deviceManager.DeviceInfos.Count; i++)
{
// Add the device only if it's a scanner
if (deviceManager.DeviceInfos[i].Type != WiaDeviceType.ScannerDeviceType)
{
continue;
}
// Add the Scanner device to the listbox (the entire DeviceInfos object)
// Important: we store an object of type scanner (which ToString method returns the name of the scanner)
listBox1.Items.Add(
new Scanner(deviceManager.DeviceInfos[i])
);
}
}
private void button1_Click(object sender, EventArgs e)
{
Task.Factory.StartNew(StartScanning).ContinueWith(result => TriggerScan());
}
private void TriggerScan()
{
Console.WriteLine("Image succesfully scanned");
}
public void StartScanning()
{
Scanner device = null;
this.Invoke(new MethodInvoker(delegate()
{
device = listBox1.SelectedItem as Scanner;
}));
if (device == null)
{
MessageBox.Show("You need to select first an scanner device from the list",
"Warning",
MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
else if (String.IsNullOrEmpty(textBox2.Text))
{
MessageBox.Show("Provide a filename",
"Warning",
MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
ImageFile image = new ImageFile();
string imageExtension = "";
this.Invoke(new MethodInvoker(delegate()
{
switch (comboBox1.SelectedIndex)
{
case 0:
image = device.ScanPNG();
imageExtension = ".png";
break;
case 1:
image = device.ScanJPEG();
imageExtension = ".jpeg";
break;
case 2:
image = device.ScanTIFF();
imageExtension = ".tiff";
break;
}
}));
var path = Path.Combine(textBox1.Text, string.Format(@"{0}", Guid.NewGuid()).Replace("-", "").ToUpper() + imageExtension);
if (File.Exists(path))
{
File.Delete(path);
}
image.SaveFile(path);
}
}
modified 14-Oct-18 20:42pm.
|
|
|
|
|
Without knowing anything about what you're using to do the black and white scan, and it's capabilities, it's pretty much impossible to tell you what is going on.
|
|
|
|
|
Thank you for feedback I have included the code which in my post which I have implemented
|
|
|
|
|
|
Can anybody help me uploading images (also other files) like Profile Photo (as in Skype, WhatsApp-Web, TeamViewer) through a Windows application written in C#.NET.
Note that, user want to upload photographs from his Desktop application to his own web-hosting and the files should be saved in a special folder inside the hosting. Later, these photographs should be accessed through his web application
|
|
|
|
|
And?
What have you tried?
Where are you stuck?
What help do you need?
From your recent questions, you don't seem to have done anything towards your projects, and we aren't here to do all your work for you ... you are the one getting paid for this, remember?
Sent from my Amstrad PC 1640
Never throw anything away, Griff
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
You seem to have the wrong idea as to what this site is all about, it is a developer site, for the betterment of developers not a supply code site. If you are building the application then we can help with specific coding problems.
As for uploading files there are many articles here that will show you how it is done. You question on free SMS, how do you expect to get the data onto the mobile network, magic!
Never underestimate the power of human stupidity
RAH
|
|
|
|
|
I am trying to develop a solution for small business house. I am want to integrate something such that the user of the application software can send SMS to any number for absolutely free without using any API or SMS Gateway.
If any solution available to send SMS to WhatsApp or Telegram or to any Android App is also ok. Can anybody please help me on this.
|
|
|
|
|
SMS messages use the mobile telephone networks and all of them charge for it.
|
|
|
|
|