|
I have an MDI form. A child form (frm1) can be launched from the MDI's menu. A contol on the child form launches another form (frm2) whos parent is the MDI form.
When I launch frm1, it is launched as Maximized. When I launch frm2 from frm1 I launch it as windowstate Normal. However, it doesn't launch as normal. It launches as maximized. How can I fix this?
|
|
|
|
|
This seems to be expected behavior, much like opening a new document in Visual Studio when existing documents are displayed as maximized.
/ravi
|
|
|
|
|
Hi all
I'm new to C# and .Net 2.0 multithreading system.
I read about Thread.BeginCriticalRegion() and Thread.EndCriticalRegion() function to ensure that when the user call Abort() for a thread, this executes until the end of the critical region before it exits.
What I would like to know is what happens if the CriticalRegion is inserted in a try/catch block with the handling of a ThreadAbortException ?
Does it behaves the same( it executes until Thread.EndCriticalRegion() )? or does the exception is thrown immmediately even in the middle of the CriticalRegion area?
Reagards
ManuStone
|
|
|
|
|
The behavior seems to be dependent on the CLR host. According to MSDN[^], some hosts may decide to unload the entire app domain rather than take the risk of continuing execution in a potentially unstable state. If the app domain isn't unloaded, it appears that the code will execute until EndCriticalRegion() is called, afer which control will transfer to the catch() handler.
/ravi
|
|
|
|
|
Hi Ravi
thank you for your response.
Regards
manStone
|
|
|
|
|
Is it possible to use foreach with enums?
basically this is what I want to do:
public enum Color
{
red,
blue,
green
}
public class ColorStar
{
public ColorStar(Color c);
public static List<Color> MakeAllColors()
{
List<Color> colors = new List<Color>();
foreach (Color c in Color)
colors.Add(new ColorStar(c);
return colors
}
}
I know about Enum.GetNames and Enum.GetValues, but I don't want the names or values I want the actual enum items.
|
|
|
|
|
I think this should do what you want:
foreach (Color c in [Enum].GetValues(GetType(Colors))) {
...;
}
/ravi
|
|
|
|
|
Yeah, that did it... evidently I completely misread some documentation the first time I looked at it.
Thank you!
|
|
|
|
|
I am writing a program in Visual Studio .NET 2003, and as such I am using version 1.1 of the .NET Framework.
I need to include a function to ping a remote computer, and, while it is easy enough to pass it into the command prompt, I don't know of any way to read the result of the ping attempt.
MSDN says that there is a Ping class in .NET 2.0 and 3.0 (System.Net.NetworkInformation.Ping - system.dll), but that doesn't really help me, as it's not in .NET 1.1
Is there any way I can import the functionality from .NET 2.0 (I have the Framwork and C# 2005 Express installed), or is there any other way to ping and receive a result?
I would really appreciate some help with this, as I need to make this program for work.... and I need to have it done by Monday afternoon.
Thanks again,
MartyExodus
|
|
|
|
|
|
I suppose you could access a v2.0 assembly (dll) from a v1.1 executable.
The method I have that wraps the ping is:
<br />
public static System.Net.NetworkInformation.IPStatus<br />
Ping<br />
(<br />
string HostName<br />
)<br />
{<br />
System.Net.NetworkInformation.IPStatus result = System.Net.NetworkInformation.IPStatus.Unknown ;<br />
<br />
try<br />
{<br />
result = (new System.Net.NetworkInformation.Ping()).Send ( HostName , 1000 ).Status ;<br />
}<br />
catch<br />
{<br />
}<br />
<br />
return ( result ) ;<br />
}<br />
You don't even need the express version, just the SDK.
|
|
|
|
|
You can use the StandardOutput property of the Process class to capture the output of a commandline application.
--
Rules of thumb should not be taken for the whole hand.
|
|
|
|
|
Ha. Thank you everyone for your quick responses. However, I'm still having a slight problem, possibly due to that fact that i didn't articulate my original problem.
ednrgc and PIEBALDconsult - The reason that i didn't do as the two of you said is simply this: System.Net.NetworkInformation doesn't exist in .NET 1.1, and as such, the Ping class doesn't exist either (Or I possibly don't know how to access them, but I'm pretty sure I'm right)
dan neely - I believe this method will work, however, I'm rather uncertain as to HOW to use it. This is what I have so far:
using System;
using System.Diagnostics;
using System.IO;
private void ping(string computer)
{
string args = "/k ping " + computer;
Process p = new System.Process()
ProcessStartInfo ps = new ProcessStartInfo("cmd", args);
p.StartInfo = ps;
p.Start();
StreamReader s = p.StandardOutput;
MessageBox.Show(s.Readline);
}
The command prompt loads correctly, but alas, the StreamReader fails, and the MessageBox does not show. It generates an InvalidOperationException, and simply states "StandardOutput has not been redirected."
Thanks everyone again for the quick response, and hopefully, you can help me further.
Thanks,
MartyExodus
|
|
|
|
|
|
Hey, thanks a lot.
While I'm not using the exact code from the article you posted... (simply because I'd like to LEARN rather than simply USE) you've inspired me to learn how to use sockets - something I should have done a long time ago.
But again, thanks to all who posted.
-MartyExodus
|
|
|
|
|
MartyExodus wrote: simply because I'd like to LEARN rather than simply USE
Then you have a bright future!
led mike
|
|
|
|
|
MartyExodus wrote: PIEBALDconsult - The reason that i didn't do as the two of you said is simply this: System.Net.NetworkInformation doesn't exist in .NET 1.1,
I understand that. But I meant compile the method into its own v2.0 dll and reference it from your v1.1 executable. You said you have the Express version so you must have the v2.0 dlls and compiler. I haven't tried it, nor do I have a way to try it.
|
|
|
|
|
Well I once did my own ping in .NET 1.1
Her is the code; it will only compile and run within my environment,
but I'll show it anyway.
env.log() is just a logging function, and can be ignored (or used!)
class LP_Format does string formatting, is obvious
class LP_Thread basically is Thread, LP_BackgroundThread is derived from Thread
(sets IsBackground and calls Start).
remark: this is not thread-safe (since I use a static pingResult internally),
but that could easily be solved.
<pre>
public static bool Ping(string remoteIPadrString) {
pingResult=false;
LP_BackgroundThread thread=new LP_BackgroundThread("PING("+remoteIPadrString+")",
new LP_ObjectHandler(Pinger), remoteIPadrString);
if (!thread.Join(10000)) {
env.log(0, "Aborting PING("+remoteIPadrString+") due to timeout");
//thread.Abort();
LP_Thread.Sleep(1000);
}
return pingResult;
}
protected static bool pingResult;
protected static void Pinger(object arg) {
string remoteIPadrString=arg as string;
env.log(0, "---------");
env.log(0, "Ping("+remoteIPadrString+")");
IPAddress remoteIPadr=IPAddress.Parse(remoteIPadrString);
pingResult=false;
Socket socket=null;
try {
env.log(env.DETAIL2, "remoteIPadr="+remoteIPadr.ToString());
IPAddress[] IPAS=getIPAddresses();
env.log(env.DETAIL2, "got IP addresses");
socket=null;
foreach (IPAddress IPA in IPAS) {
try {
env.log(env.DETAIL2, "Ping("+remoteIPadrString+") using "+IPA.ToString());
socket=new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.Icmp);
socket.Blocking=false;
env.log(env.DETAIL1, "got socket");
EndPoint localEP=new IPEndPoint(IPA, IPEndPoint.MinPort);
EndPoint remoteEP=new IPEndPoint(remoteIPadr, IPEndPoint.MinPort);
socket.Bind(localEP);
ushort[] sdata=new ushort[20];
sdata[0]=0x0800; // ICMP echo request
sdata[1]=0; // ICMP checksum
sdata[2]=0x0100; // ICMP identifier
sdata[3]=0x0400; // ICMP sequence number
ushort val=0x6162;
for (int j=0; j<16; j++) {
sdata[j+4]=val;
val+=0x0202;
if (val==0x7963) val=0x6263;
if (val==0x7778) val=0x7761;
}
sdata[1]=ICMPchecksum(sdata);
env.log(env.DETAIL2,"checksum="+LP_Format.Hex4(sdata[1]));
byte[] bdata=new byte[40];
for (int j=0; j<20; j++) {
bdata[2*j]=(byte)((sdata[j]>>8)&0xFF);
bdata[2*j+1]=(byte)(sdata[j]&0xFF);
}
bool dump=false;
int len=socket.SendTo(bdata, remoteEP);
env.log(env.DETAIL1, "sent");
if (dump) {
env.log(env.DETAIL2,"sent len="+len);
for (int j=0; j<len; j+=4) {
env.log(env.DETAIL2, LP_Format.Hex2(bdata[j])+" "+
LP_Format.Hex2(bdata[j+1])+" "+
LP_Format.Hex2(bdata[j+2])+" "+LP_Format.Hex2(bdata[j+3]));
}
}
LP_Thread.Sleep(50);
int len2=0;
byte[] bdata2=new byte[300];
len2=socket.ReceiveFrom(bdata2, SocketFlags.Peek, ref remoteEP);
env.log(env.DETAIL1, "received");
if (dump) {
env.log(env.DETAIL2,"received len="+len2);
for (int j=0; j<len2; j+=4) {
env.log(env.DETAIL2, LP_Format.Hex2(bdata2[j])+" "+
LP_Format.Hex2(bdata2[j+1])+" "+
LP_Format.Hex2(bdata2[j+2])+" "+LP_Format.Hex2(bdata2[j+3]));
}
} else {
env.log(env.DETAIL2,"len="+len+" len2="+len2);
}
pingResult=true;
env.log(0, "Ping("+remoteIPadrString+") using "+IPA.ToString()+" is OK");
} catch(Exception) {}
try {if (socket!=null) socket.Shutdown(SocketShutdown.Both);} catch(Exception) {}
try {if (socket!=null) socket.Close();} catch(Exception) {}
socket=null;
}
} catch(Exception e) {
env.error(e);
}
try {if (socket!=null) socket.Shutdown(SocketShutdown.Both);} catch(Exception) {}
try {if (socket!=null) socket.Close();} catch(Exception) {}
env.log(env.DETAIL1,"ping("+remoteIPadrString+")="+pingResult);
}
</pre>
Cheers
Luc Pattyn
|
|
|
|
|
MartyExodus wrote: Is there any way I can import the functionality from .NET 2.0
Sure!
1- First install DotNet 2.0 on your machine.
2- Then add a reference to your project. Choose browse.
3- Browse to the DotNet 2.0 folder -I believe it's under "windows\system32"-. and choose the assembly you want to reference.
4- In your case the assembly should be "System.Net.NetworkInformation.dll ".
PS.
If you do this then DotNet 2.0 should also be installed on the user's machine.
Regards
|
|
|
|
|
Sing with me
You're not shy, you get around
You wanna fly, don't want your feet on the ground
You stay up, you won't come down
You wanna live, you wanna move to the sound
Got fire in your veins, burning hot, but you don't feel the pain
Your desire is insane, you can't stop until you do it again
But sometimes I wonder, as I look in your eyes
Maybe you're thinking of some other guy
But I know, yes I know how to treat you right
That's why you call me in the middle of the night, you say
It's urgent, so urgent, so urgent, just wait and see
How urgent my love can be, it's urgent
You play tricks on my mind, you're everywhere, but you're so hard to find
You're not warm, you're sentimental
You're so extreme, you can be so temperamental
But I'm not looking for a love that'll last
I know what I need and I need it fast
Yeah there's one thing in common that we both share
That's our need for each other anytime, anywhere
It gets urgent, so urgent, you know it's urgent
I wanna tell you it's the same for me
So urgent, just wait and see, how urgent my love can be, it's urgent
(Solo)
You say it's urgent, make it fast, make it urgent
Do it quick, do it urgent, gotta run, make it urgent
Wait it quick, want it urgent, urgent, emergency, urgent, urgent, emergency
Urgent, urgent, emergency, urgent, urgent, emergency
So urgent, emergency
|
|
|
|
|
Now what would be really cool is if Chris would set the backgound sound to this when someone submitted anything with URGENT in the title.
only two letters away from being an asset
|
|
|
|
|
So, how did you develop this song was it using ANNs or may a GA no I know it was a urgent desire to track down and thump in the head all of these urgent commands(sorry requests) - so you used A*.
Programmer: A biological machine designed to convert caffeine into code. * Developer: A person who develops working systems by writing and using software.
[ ^]
|
|
|
|
|
PLEASE DONT POST LOUNGE QUESTIOONS IN THE PROGRAMMING FORUMS
|
|
|
|
|
Oops. My bad. :->
|
|
|
|
|
I just hope most of them never figure out how to post their question multiple times.
led mike
|
|
|
|
|