|
In C# 2005, I used the Nokia E63, I want to check SerialPort Exist Modem, While it run does not get run COM port, you see my code
private void btnGetPort_Click(object sender, EventArgs e)
{
cmbPort.Items.Clear();
foreach (string portName in SerialPort.GetPortNames())
{
try
{
using (SerialPort sp = new SerialPort(portName, 9600))
{
if (!(sp.IsOpen)) sp.Open();
sp.DiscardInBuffer();
sp.DiscardOutBuffer();
sp.Write("AT\r\n");
System.Threading.Thread.Sleep(100);
string response = sp.ReadExisting();
if (response == "OK")
{
cmbPort.Items.Add(portName);
}
}
}
catch (Exception ex)
{
continue;
}
}
}
|
|
|
|
|
We can't really help you based on that little: but I'd guess that sleeping the thread for 100ms is not a good idea.
That's only 1/10th of a second, and at 9600 baud that's not a lot of characters - about 96 in total.
9600 baud == 9600 bits per second ~= 960 characters per second == 96 characters in 1/10th second.
So unless the data goes out quickly, the modem responds quickly, and there is no other data returned such as a "welcome" or "status" message it's quite likely that the response may be just getting lost, because you aren't giving it enough time to talk back to you.
There is also the swallowing of all errors so you don't know what problems there are.
And the high probability that the modem doesn't just return "OK" - as a minimum it's probably going to put a carriage return / line feed pair, and quite likely to echo the input back to you as well.
And it may well need flow control (RTS/CTS and DCD), or even the bits per character and parity set correctly.
So start with the debugger and look at exactly what is happening. What are you getting back? Anything? Nothing? We can't do it for you!
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
|
|
|
|
|
According to you how much have I to put Thread.Sleep(???) to run for 9600 baud ? can I put Thread.Sleep(800) to run 9600 baud ?
|
|
|
|
|
|
No, sorry - we can't.
What I might think of as a "good project" you might think boring, simple, or hideously complicated. We don't know anything about your interests, skills, or abilities - so we can;t just say "try this" because we have no idea what would be relevant to you, or what you know that you can use to get the project moving. Let alone what projects you have completed already!
For example, if I recommend you start with a project requiring a lot of database work - but you know nothing about database - what use is that to you?
And we don't know what you want to use the project for either: practice? Hand in as part of your course? What course?
Sit down, think about the reasons for doing the project, and what you know about, and try to come up with something that fits in there, and with your interests.
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
|
|
|
|
|
I want to be able to delay windows power events, through a windows service that will be running in the background. I need to delay these events, such as shutdown, restart, etc. a few seconds, so that I can perform an operation before the pc goes into any of these events.
Can someone please guide me in the right direction?
Thanks.
|
|
|
|
|
You don't delay them. Your code has to register with Windows to receive notifications of power events. Windows won't change power state until all subscribers let Windows know that it's safe to do so.
You have to subscribe to the SystemEvents.PowerModeChanged event. It's not that straight forward in a Service app. You have to have a message pump running (which Services don't normally have) in order to get the power messages Windows broadcasts. There is an example linked to by this page[^].
|
|
|
|
|
What I am trying to do is detect the windows power events with a service and then send a message using sockets to a java app, so that it can do the rest of the process.
Please tell me if this is possible or give me a better approach to aolve my problem, still using the java app I have.
|
|
|
|
|
Is the Java app running on the machine too or on a separate machine? Using sockets I would assume on a separate machine.
In which case, you send the message and then the event handler returns. That's it, nothing else.
But I get the feeling there's more to this process than you're telling us, like you have to wait for something to come back from the Java app or whatever?
|
|
|
|
|
Both apps are on the same computer.
I just need a way to tell the java app that a power event has ocurred. I just don't know if I will have to delay the power event, so that the java app has enough time to respond to that event.
|
|
|
|
|
In that case you're going to have to interact with the power manager and register for notifications yourself. Read this[^].
You've got some research to do there. I don't know exactly what you have to do to accomplish the goal and I don't know your exact requirements for monitoring which power states you need.
It's entirely possible the SystemEvents.PowerModeChanged event will not work for you and you won't be able to use it. You'll have to set this up yourself too.
|
|
|
|
|
What I was thinking was to use the system power events in c#, to send a message through a socket and then do the rest of the process in java. I was thinking that maybe I could use an event or some config to delay these power events, so that my java app can do the rest, or maybe a shortcut with a cmd command.
I am trying to communicate with C#, because there is no way that I know to monitor system shutdown or any other power event, so that it is platform independant, so that it works on all versions of windows.
|
|
|
|
|
That's why I said YOU have some research to do. You're adding more and more things to your requirements and I'm not getting paid to do (and redo) your homework for you.
If you're trying to support every version of Windows you're going to be disappointed because only you know what exact power modes you're going to support and some of those options might not exist in older versions of Windows.
Also, there are some situations where Windows does not ask the applications if it's OK to change the power state. Again, only you know if that's acceptable or not and under which circumstances.
I've pointed the way. The rest of the reading is up to you.
|
|
|
|
|
Thanks for all your help.
|
|
|
|
|
What I will end up using is win form that detects the power events and sends a message through sockets. I think that is the easiest way thanks for your help.
|
|
|
|
|
Hi,
I want to load a screen with a ViewModel depending on the option selected.
I thought Inheritance would be key here, as a lot of the properties are the same. Below is an extract of the code that I have.
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
bool isHandheld = false;
var pdv1 = isHandheld == true ? new PDVHH() : new PDV();
txtCaseID.Text = pdv1.CaseID;
txtPDV.Text = isHandheld == true ? pdv1.PDVString : string.Empty;
txtPDVHH.Text = isHandheld == true ? pdv1.PDVHHString : string.Empty;
}
}
class basePDV
{
public string CaseID { get; set; }
}
class PDV : basePDV
{
public string PDVString { get; set; }
}
class PDVHH : basePDV
{
public string PDVHHString { get; set; }
}
The error I am receiving is... "Type of conditional expression cannot be determined because there is no implicit conversion between 'WindowsFormsApplication1.PDVHH' and 'WindowsFormsApplication1.PDV'"
I'm hoping someone can give me some guidance on a solution for this.
Thanks,
|
|
|
|
|
C#'s ternary operator is annoying like that[^] (even when var is not used), but you can just cast everything to the base type and it will work.
Like this (not tested)
var pdv1 = isHandheld ? (basePDV)new PDVHH() : (basePDV)new PDV();
|
|
|
|
|
Hi,
If I cast it as basePDV, I am unable to access the properties inside PDV and PDVHH.
Thanks,
|
|
|
|
|
And yet you have to. That's the most specific type that variable can have - the least common ancestor of the types it may have at runtime.
So if a property must be accessible, it has to be in the base type. Of course, the derived types may override it.
|
|
|
|
|
Suggestions:
If this isn't a quickly abstracted example but your actual code then don't include the type name in the name of fields or properties and also not the class name. "PDVString" doesn't convey any useful meaning. If it is a description, name it "Description" or likewise for whatever it is.
And to me it looks like you could just as well make it a base class member. For handhelds it will contain the description (or whatever) for handhelds and else for non-handhelds. Likewise you could replace the TextBoxes "txtPDV" and "txtPDVHH" by a single TextBox "txtDescription" and thus do away with any type distinction:
var pdv1 = isHandheld ? (basePDV)new PDVHH() : (basePDV)new PDV();
txtCaseID.Text = pdv1.CaseID;
txtDescription.Text = pdv1.Description;
If the brain were so simple we could understand it, we would be so simple we couldn't. — Lyall Watson
|
|
|
|
|
Hi Both,
Thanks for the replies, I think I need to look into changing this solution.
|
|
|
|
|
Hi there, this is my first post, sorry if I dont get it right on the first time.
I have a program that loads data from a sharepoint.
It loads txt files, xml files, etc.
Any of these "load" actions take a lot of time because of the user's connectivity to the sharepoint.
Therefore the whole windows form UI gets unresponsive until the data is loaded.
So I would like to learn how can I easily create a thread for that "retrieval" of information while the whole windows forms UI still works and is operative.
Thanks in advance.
This is an example of one of the longest tasks, and I would like to encapsulate it into a new thread if possible
XmlDataDocument xmlDoc = new XmlDataDocument();
string str = "http://www.w3schools.com/xml/note.xml"
WebRequest request = WebRequest.Create(str);
request.Timeout = 30 * 60 * 1000;
request.UseDefaultCredentials = true;
request.Proxy.Credentials = request.Credentials;
WebResponse response = (WebResponse)request.GetResponse();
using (Stream fs = response.GetResponseStream())
xmlDoc.Load(fs);
|
|
|
|
|
|
can you give me an example of how to use it?
thanks
|
|
|
|
|