|
haha! sorry for the trouble! getting confused talking to 3 people, what i have told who!
so that is a less heavy version of:
try
{
setting.Activate();
}
catch
{
setting = new Settings();
setting.ShowDialog();
setting.Dispose();
setting = null;
}
?
just tried it and it works perfectly, thanks for the help! out of interest, if this code is run after a form has previously been created and then closed, i assume the formSettings.IsDisposed case deals with it? but does the new formSettings replace the old one? or does it create new ones over and over and fill up memory?
while your here, do you know if it is possible to include a driver installation along with my project (drivers not made by me)? i do not have a .exe for the drivers, just the files which you have to point windows in the direction of when the device is first plugged in that are then installed by windows.
thanks again!
|
|
|
|
|
No memory overhead at all. The GC will clean up automatically for you.
Yeah, if there's no installer you can include the files in your setup project and copy them to
Environment.GetFolderPath(Environment.SpecialFolder.System)) and windows should be able to find them automatically.
DaveBTW, in software, hope and pray is not a viable strategy. (Luc Pattyn)Visual Basic is not used by normal people so we're not covering it here. (Uncyclopedia)
|
|
|
|
|
your a star! im not at the stage of testing that yet, but thats great!
i followed this guide earlier: [^]
is this bad practise to create a loop to fire an event?
|
|
|
|
|
I haven't read the whole article, just a quick 'speed skim' but I wouldn't day it's bad practice as such. If an event needs to fire at a regular time, I'd do it asynchronously so the invoked method doesn't block the callee.
I have an article Events Made Simple[^] that may be worth a read if you want to learn about events.
DaveBTW, in software, hope and pray is not a viable strategy. (Luc Pattyn)Visual Basic is not used by normal people so we're not covering it here. (Uncyclopedia)
|
|
|
|
|
interesting, your final solution looks similar to what i have in my code. but doesnt it rely on an event that is built into a textbox (textBox1_TextChanged)? what if (like i found) there is nothing to start the event? specifically, i wanted to check if a process has begun or ended. i created a method that can check for this, but surely, even if i run it asynchronously, it will only check once, then return? so at the heart of an event that is always checking, there must be a loop?
i heard the word "hook" thrown around... would a 'hook' allow me to utilise a system event for a specific process ending/starting?
i think i have done it asynchronously in my project, by creating a new thread for the method, a bit like BeginInvoke does...
|
|
|
|
|
There's basically two ways of finding out about things that are happening in a system, by listening for messages/callbacks(events) from the system or going looking for them yourself and polling/monitoring them.
If there's an existing message you can hook into then that's the best way. If not then you're left with no alternative but to loop and poll.
I have no experience of dealing with external processes in .NET so I can't advise you there. I would imagine there would already me some events but you never know!
DaveBTW, in software, hope and pray is not a viable strategy. (Luc Pattyn)Visual Basic is not used by normal people so we're not covering it here. (Uncyclopedia)
|
|
|
|
|
ok then, ill stick with my existing loop, and put that in the "todo if have time" list, which is kinda unlikely to get done as im working on two projects at the moment
if ur interested, this is what i botched together:
class MediaCenterController
{
private bool on;
public bool DataSelect(byte data)
{
return true;
}
public delegate void MediaCenterHandler(object MCRunning, MediaCenterEventArg StateInfo);
public event MediaCenterHandler MediaStateChange;
public void MediaCenterRunning()
{
for (; ; )
{
Thread.Sleep(1000);
bool onoff = (System.Diagnostics.Process.GetProcessesByName("calc").Length != 0);
Debug.WriteLine(onoff);
if (onoff != on)
{
MediaCenterEventArg StateInfo = new MediaCenterEventArg(onoff);
if (MediaStateChange != null)
{
MediaStateChange(this, StateInfo);
}
}
on = onoff;
}
}
}
public class MediaCenterEventArg : EventArgs
{
public MediaCenterEventArg(bool on)
{
this.on = on;
}
public readonly bool on;
}
changing Thread.Sleep(1000); directly affects the amount of cpu the app is using :P
|
|
|
|
|
This[^] might be of interest
DaveBTW, in software, hope and pray is not a viable strategy. (Luc Pattyn)Visual Basic is not used by normal people so we're not covering it here. (Uncyclopedia)
|
|
|
|
|
brilliant! clearly my googling skills need some work! so there's already a nice win 32 handler: EventArrivedEventHandler , along with .EventArrived that does all the hard work for me!
much more pro than a loop, i must say!
so it registers up with WMI, using a "WQL process query string" to tell it to fire an EventArrived event whenever a process is created, modified, deleted.
presumably, i could strip off some of this for my application (eg, go straight to Init, get rid of the "modified".)
fingers crossed windows media centre doesnt screw this up like it did when i was trying to send windows messages to it...
its normal to have to use .start and .stop?
thanks
|
|
|
|
|
If your app needs to show a Form on occasion, you only have two options:
- instantiate and show the Form every time you need it;
- instantiate it once, and Show/Hide it as needed.
The amount of code will not vary much; keeping the Form alive but hidden has the characteristic that all Controls retain their settings (e.g. text entered in a TextBox by the user). The price to pay is the memory the Form is using.
BTW: you don't have to instantiate the Form right away, as in initialization code
(private Form myForm=new Form...); you can also have one or more if (myForm==null) myForm=new Form(); so the Form gets instantiated if and when it is needed for the first time.
Luc Pattyn [Forum Guidelines] [My Articles]
- before you ask a question here, search CodeProject, then Google
- the quality and detail of your question reflects on the effectiveness of the help you are likely to get
- use the code block button (PRE tags) to preserve formatting when showing multi-line code snippets
modified on Sunday, June 12, 2011 8:23 AM
|
|
|
|
|
Luc Pattyn wrote: If your app needs to show a Form on occasion, you only have two options:
- instantiate and show the Form every time you need it;
- instantiate it once, and Show/Hide it as needed.
brill, i think i had got into my head that it could some how be instantiated without new so i could just use show when i liked, and if it was already showing, the show command would do nothing.
i think my choice will be the first one, as the settings box will be used rarely, and as you say (and i had the feeling it would), the alternative uses more memory. im not too bothered about keeping a textbox full, whenever the form loads, i will load settings onto the various controls, and when the use hits apply, i will save into settings, and hopefully code in for the settings to be updated back in the main application.
also thanks for the code for initializing the form, i think it is the same as my try...catch solution?
|
|
|
|
|
here is the advise i got, maybe im misinterpreting it:
"Suggestion - make the Form a member variable of your Program class. This way, you can only ever have one. If it's set already, you don't need to new it up. Making the form modal may well render your notification tray menu inactive, so I consider going modeless."
|
|
|
|
|
Hi,
seems like "you can only ever have one" is meant to read "you can do all you need with just one".
Having the Form as a class member brings you several things:
1. you only can have one Form object at a time, provided you don't create any local Form variables anywhere; so it is not the class member that keeps your count at maximum one, it is your coding discipline.
2. you can still do myForm=new Form(); , and each of myForm.Visible=false; myForm.Visible=true; myForm.Show(); myForm.Hide(); as often as you want, so "i want to only be able to show it once" is not met, unless again you apply coding discipline (that's "If it's set already, you don't need to new it up").
3. you can reuse it (i.e. turn invisible then visible again) keeping the Control settings from one occasion to the next; this is the real benefit of making it a class member, without being a class member your Form object would be in limbo whether still visible on the screen (assuming a modeless window that has not been closed yet) or not (assuming a modeless but closed window, or a modal window obviously closed since you left the method containing the ShowDialog call).
Luc Pattyn [Forum Guidelines] [My Articles]
- before you ask a question here, search CodeProject, then Google
- the quality and detail of your question reflects on the effectiveness of the help you are likely to get
- use the code block button (PRE tags) to preserve formatting when showing multi-line code snippets
|
|
|
|
|
Luc Pattyn wrote: that's "If it's set already, you don't need to new it up"
hmm well i took that to mean, i dont need to use the new command when i want to make the form appear, so i tried everything i could to get a form to appear without using 'new'.
so by coding discipline you mean something like:
try
{
setting.Activate();
}
catch
{
setting = new Settings();
setting.Show();
}
Cos i was thinking of just using something like an if statement but it didnt feel right. it just felt like there should be some way of declaring a form that was used across the whole class (like declaring a variable, where if i change it in one method, it can be accessed in another method and have the same value. although thinking about this, the variable must be created as the application starts, just like my form was when i was using public Settings setting = new Settings(); - i kept getting a form straight away. its a pity that in order to own a form, you need another form to own it, otherwise i could have used something like
setting = new Settings();
setting.showdialog(this);
which would allow only one to be created?
so as for number 3, is it better to reuse the same form? should i create my form as soon as my application starts but use a myForm.Hide(); ? at the minute im using Application.Run(); and not Application.Run(new myForm); as it would be when you start a default windows application on c#. the later would create the form straight away... but i could then hide it somehow?
if i created my form straight away, i could use a notifyicon attached to it to Show and Hide it and exit my script, if not, i can do what i am doing at the minute and include my notifyicon in my Main() area...
|
|
|
|
|
Sorry, you "think" and "feel" too much. I suggest you gather some facts. Buying and studying a tutorial book seems like an appropriate step. Right now you need to read more and write less.
Luc Pattyn [Forum Guidelines] [My Articles]
- before you ask a question here, search CodeProject, then Google
- the quality and detail of your question reflects on the effectiveness of the help you are likely to get
- use the code block button (PRE tags) to preserve formatting when showing multi-line code snippets
modified on Sunday, June 12, 2011 8:24 AM
|
|
|
|
|
this is the only question i have asked, i just wanted to make sure i was doing it properly (my instinct from my past programming experience would be to make an if statement). i have got pretty far just reading, i dont have a book and dont have access to one right know.
thanks for your help, ill go back to google now
|
|
|
|
|
hi,
I am developing an client server application using socket communication, in which a port always be in listen mode.
How can i make sure the port is secure from virus?
Is there any property in socket to make itself secure from unauthorized access?
Regards,
Yesuprakash
|
|
|
|
|
yesu prakash wrote: How can i make sure the port is secure from virus?
A port is like the door to your house. Your door does not get infected by a virus. Someone opens the door, brings the virus in, then you get infected.
yesu prakash wrote: Is there any property in socket to make itself secure from unauthorized access?
No, authorized access is a protocol decision. You can check the peer info on accept (or accept callback) and filter out based on ip or mac but that's about as much help as you'll get from the socket api.
...cmk
The idea that I can be presented with a problem, set out to logically solve it with the tools at hand, and wind up with a program that could not be legally used because someone else followed the same logical steps some years ago and filed for a patent on it is horrifying.
- John Carmack
|
|
|
|
|
How an unauthorised IP thru my lisitning port destroy my system?
|
|
|
|
|
hi
in a hash tabele i got key as modem numbers and value is an incrementing int values .how can i know which key value is the highest or lowest in c#?
|
|
|
|
|
Hi,
the keys and the values are available as an ICollection in Hashtable.Keys and Hashtable.Values,
so you can figure it out yourself. Same for Dictionaries.
Luc Pattyn [Forum Guidelines] [My Articles]
- before you ask a question here, search CodeProject, then Google
- the quality and detail of your question reflects on the effectiveness of the help you are likely to get
- use the code block button (PRE tags) to preserve formatting when showing multi-line code snippets
modified on Friday, February 20, 2009 12:04 AM
modified on Sunday, June 12, 2011 8:24 AM
|
|
|
|
|
can somebody help me with a c# code to get the highest int value in a hash table..plzz
|
|
|
|
|
this means you have a Hashtable and the keys are INT?
you may get all the keys of a HT, by using Keys property, just create a function that returns the MAX from keys array.
Calin
|
|
|
|
|
I have been trying to parse the Directory list into usable information.
For example if I am given the following:
-rw-r--r-- 1 ftp ftp 87040 Feb 17 23:46 Test_test Resume_Full.doc
The problem is how to know what is what. I can't parse/split based on a space " " because what happens is the date is seperated on spaces as well as the file names.
Can anybody help me?
Code Information below: In the code below the method "ExecuteCommand" just gets the response from the server.
------------------------------CODE BLOCK----------------------------------
Socket l_ClientDataSocket = null;
int l_iDataPort;
TcpListener l_FTPListener = null;
Byte[] l_bRecvData = new Byte[5120];
int l_iBufferLimit = 5119;
FileStream l_fsOutFile = null;
BinaryWriter l_fbOutFile = null;
string l_strCommand = "";
StringCollection l_strOutput = new StringCollection();
int l_iRetval = 0;
l_FTPListener = new TcpListener(0);
l_FTPListener.Start();
IPEndPoint pt = (IPEndPoint)l_FTPListener.LocalEndpoint;
l_iDataPort = pt.Port;
string l_strPortParams = GetPortParameters(l_iDataPort);
string l_strPortCommand = "PORT " + l_strPortParams + "\r\n";
l_iRetval = ExecuteCommand(l_strPortCommand, ref l_strOutput);
l_strCommand = "LIST " + l_strCurrDir + "\r\n";
l_iRetval = ExecuteCommand(l_strCommand, ref l_strOutput);
Thread.Sleep(500);
if (l_FTPListener.Pending())
{
l_ClientDataSocket = l_FTPListener.AcceptSocket();
}
l_ClientDataSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, RecvTimeOut);
l_ClientDataSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.SendTimeout, SendTimeOut);
l_bRecvData.Initialize();
l_strOutput = new StringCollection();
l_iRetval = 0;
string l_strTemp = "";
Thread.Sleep(1000);
for (; l_ClientDataSocket.Available > 0; )
{
l_bRecvData.Initialize();
l_iRetval = l_ClientDataSocket.Receive(l_bRecvData, l_iBufferLimit, 0);
l_strTemp = Encoding.ASCII.GetString(l_bRecvData, 0, l_iRetval);
Thread.Sleep(400);
}
if (l_FTPListener != null)
{
l_FTPListener.Stop();
l_FTPListener = null;
}
modified 13-Feb-19 21:02pm.
|
|
|
|
|
I'm having a really strange problem with trying to access a SharePoint site via code.
I have an application that is using the SharePoint object model, like this
using (SPSite site = new SPSite(SiteIP))
The code is running on one server(SP is on this server) but now it needs to be moved to another server. Since the SiteIP is read from a config file I thought, no problem, change the IP and it should work. However, every time I try I get the FileNotFoundException. No matter what machine I try running it on I get the same exception.
To make it even more strange if I run this code on another box but use the IP of the site that is currently work I get the same exception.
A couple of articles pointed to a problem about giving the AppPool identity permissions in SQL Server, but that didn't help.
This is really baffling me. Anyone have some ideas?
only two letters away from being an asset
|
|
|
|
|