|
The CLR Profiler (v2.0)[^] might be of some help, give it a try.
-Nick Parker
Last time I checked, all programmers have selective ignorance. I know nothing about 3D graphics. I know a lot about COM. VB gets under people's skin because one can be ignorant of computer architecture and ASM and still get a lot done. - Don Box
|
|
|
|
|
|
This is propably a question from which everyone should know the answer, but I want to ask it anyway.
If I have an enum, like this:
[Flags]
public enum ThisIsAnEnum
{
None,
FirstFlag,
SecondFlag,
ThirdFlag,
FourthFlag
}
How do I test whether a specific value is used?
Is this the proper way?
ThisIsAnEnum enumValue = ThisIsAnEnum.SecondFlag | ThisIsAnEnum.FourthFlag;
if (enumValue & ThisIsAnEnum.SecondFlag != 0)
{
}
Or is there some method like Flags.Match() , but for a bitfield value?
And why do I have to add the values of the enum to it's members? Like this:
[Flags]
public enum ThisIsAnEnum
{
None = 0,
FirstFlag = 1,
SecondFlag = 2,
ThirdFlag = 4,
FourthFlag = 8
}
If I don't, their values will be 0, 1, 2, 3, 4, 5, 6..., and not 0, 1, 2, 4, 8, 16... .
Thanks in advance,
- Daniël Pelsmaeker
The earth is not dying. it is being killed...
|
|
|
|
|
Daniël Pelsmaeker wrote:
Is this the proper way?
ThisIsAnEnum enumValue = ThisIsAnEnum.SecondFlag | ThisIsAnEnum.FourthFlag;if (enumValue & ThisIsAnEnum.SecondFlag != 0){ // Do something...}
Close:
ThisIsAnEnum enumValue = ThisIsAnEnum.SecondFlag | ThisIsAnEnum.FourthFlag;
if ((enumValue & ThisIsAnEnum.SecondFlag) != 0)
{
} Putting the bitwise & statement in its own pair of parens is necessary due to operator precedence.
-----BEGIN GEEK CODE BLOCK-----
Version: 3.21
GCS/G/MU d- s: a- C++++ UL@ P++(+++) L+(--) E--- W+++ N++ o+ K? w++++ O- M(+) V? PS-- PE Y++ PGP++ t++@ 5 X+++ R+@ tv+ b(-)>b++ DI++++ D+ G e++>+++ h---* r+++ y+++
-----END GEEK CODE BLOCK-----
|
|
|
|
|
Thank you very much.
- Daniël Pelsmaeker
"The secret of a successful restaurant is sharp knives."
- George Orwell [pseud. of Eric Arthur Blair]
|
|
|
|
|
[Flags] is merely an attribute that's put on enums - it doesn't change the compiler behavior. We don't automatically switch to powers of two because people often want to define combinations of flags, and what was going on would be much less clear if that was the case. Ditto for looking at the numeric values someplace and having to translate back to the identifiers.
|
|
|
|
|
Okay, but what use is the Flagsattribute then? If I'm not mistaken, I can add enum values together using | , even when I didn't set the Flagsattribute .
|
|
|
|
|
[Flags] isn't really a compiler thing. It's used by object browsers to tell people what kind of enumeration it is, and Enum.ToString() bases its behavior on whether [Flags] is present.
|
|
|
|
|
i have written the code to transfer image file through sockets. Below is the code for client. It just runs and exit nothing happens. Can anybody help?
In this code first i get the file size then the actual file through bytes.
using System;
using System.Net.Sockets;
using System.IO;
using System.Threading;
namespace ImageClient
{
///
/// Summary description for Class1.
///
class Class1
{
bool flag = true;
Socket clientSocket;
AsyncCallback pnfCallback = null;
int fileSize;
byte[] buffer = new byte[1024];
///
/// The main entry point for the application.
///
[STAThread]
static void Main(string[] args)
{
Class1 c = new Class1();
c.clientSocket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
System.Net.IPEndPoint ipend = new System.Net.IPEndPoint(System.Net.IPAddress.Parse(args[0]),8221);
c.clientSocket.Connect(ipend);
c.WaitForData();
}
public void WaitForData()
{
if(pnfCallback == null)
{
pnfCallback = new AsyncCallback(onDataReceived);
}
IAsyncResult result = clientSocket.BeginReceive(buffer,0,buffer.Length,SocketFlags.None,pnfCallback,null);
}
public void onDataReceived(IAsyncResult result)
{
if(flag)
{
int count = clientSocket.EndReceive(result);
char[] chars = new char[count];
System.Text.Encoding.Default.GetDecoder().GetChars(buffer,0,count,chars,0);
fileSize = int.Parse(new string(chars));
Console.WriteLine("Got the buffer " + fileSize);
Console.ReadLine();
flag=false;
buffer = null;
buffer = new byte[fileSize];
WaitForData();
}
else
{
clientSocket.EndReceive(result);
FileStream fs = new FileStream("c:/def.gif",FileMode.Create);
fs.Write(buffer,0,buffer.Length);
fs.Flush();
fs.Close();
WaitForData();
}
}
}
}
|
|
|
|
|
Well, You are using an Asyncronous callback which means that the function will return immediately without waiting for the data to be received. Once the data is received the your callback method (onDataReceived )will be invoked. However, because your application has exited before the data is received the callback method will never be invoked and so no data will received either.
--Colin Mackay--
"In the confrontation between the stream and the rock, the stream always wins - not through strength but perseverance." (H. Jackson Brown)
Enumerators in .NET: See how to customise foreach loops with C#
|
|
|
|
|
How to load a C# windows application from a c# window service.Plse suggest if it is possilble and how.
Thanks in advance
|
|
|
|
|
I don't know what do you mean by "..load win. app..".
1. Do yu mean a COM object? Yes it's possible by using COM Interop
2. Do you mean an external application? It's possible by System.Diagnostics.Process.Start("your.exe");
3. Or do you mean to have external app. which communicate with Win seprvice application? It's possible by .NET remoting...
Could you be more specific?
Tomas Rampas
------------------------------
gedas
System analyst, MCSD
TGM 840,
293 01 Mlada Boleslav,
Czech Republic
rampas@gedas.cz
http://www.gedas.com/
------------------------------
To be or not to be is true...
George Bool
|
|
|
|
|
Thank you Rampas Tomas and sorry for the confusion,I mean an external windows application, I will try with System.Diagnostics.Process.Start("your.exe");
|
|
|
|
|
Hi,
I want to create a GUI similar like all the media player's (skins). The graphics are not the problem but the GUI must be sizeable. Is there somewhere a description or sample with how-to?
Cheers Gaby
|
|
|
|
|
Hi all,
If I call
g.DrawRectanlge(
new SolidBrush( Color.Blue ),
new Rectangle( 0, 0, this.Width, this.Height ) );
// in my control OnPaint()
Why is it that the right and bottom line paint one pixel outside the control?
Like if I specify a Rectangle( 0, 0, 200, 200 ), and draw it,
it draws a line down pixel x = 0, and across y = 0, good. Then down x = 200, and across y = 200. 200 is suppose to be the width and height, so the last 2 lines should be down x = 199, and across y = 199.
Has anyone else ever noticed this?
When I am drawing mulitple rectangles side by side like:
for( int i = 0; i < 7; ++i )
{
g.DrawRectangle( brush, bounds );
bounds.X += bounds.Width;
}
The lines in between the boxes are drawn over top of each other, so it looks like one line, one pixel thick.
In order for me to have the correct boxes (each has its own outline):
for( int i = 0; i < 7; ++i )
{
g.DrawRectangle( brush,
new Rectangle( bounds.X, bounds.Y,
bounds.Width - 1, bounds.Height - 1 ) );
bounds.X += bounds.Width;
}
Does anyone know the reason why this happens? What is the logic behind drawing it this way?
Thanks for any insight into this,
Kris.
|
|
|
|
|
The coordinate system
As we all know, drawing systems in .Net are based upon pixels that are arranged on a two-dimensional coordinate system. The origin, that is, the points (0, 0) lie on the far top-left of the screen. Each consecutive pixel towards the right of the origin forms the x-axis, and each consecutive pixels towards the bottom of the screen forms the y-axis.
If you note carefully, the co-ordinate system for onscreen graphics is an inverted copy of the Cartesian Co-ordinate System used in Mathematical Geometry.
Now, when we give the call to the system to draw a rectangle, we provide it with four arguments. The x-coordinate, the y-coordinate, width and the height of the rectangle. We will traverse through each step that the system undergoes to create a rectangle.
Step 1:
First, the point (x, y) or the pixel present on the point (x, y) is plotted or marked on the coordinate system as shown below.
Step 2:
Then, it adds the width provided as argument to the next consecutive x-coordinate. For instance, if the x-coordinate is 0 and the width is 10, then the resultant point on the x-axis (fx) will be:
Because x-coordinate specified was 0,
So the next x-coordinate will be 1
Final Point = next x-coordinate + width
Final Point = 1 + 10
Final Point = 11;
Same goes for the y-coordinate and the height to calculate the resultant point on the y-axis (fy).
Step 3:
System marks all the pixels from (0, 0) to the point (fx, 0) on the x-axis and also marks all the pixels from (0, 0) to (0, fy). This gives two straight lines joined at (0, 0) at an angle of 90 degrees.
The points (fx, 0) and (0, fy) are then interconnected at the point (fx, fy). Thus giving the illusion of a perfect rectangle.
What happens with GDI+ drawing routines
If you keep the x-coordinate and the y-coordinate as (0, 0), then it is seen that:
Resultant Point fx = width + 1 and
Resultant Point fy = height + 1
So, if we specify the below mentioned statements in GDI+:
g.DrawRectangle(new SolidBrush(Color.Blue), 0, 0, this.Width, this.Height);
g.DrawRectangle(new SolidBrush(Color.Blue),
new Rectangle(0, 0, this.Width, this.Height));
From these statements, it is clear that the resultant point to which the rectangle will be stretched is (this.Width+1, this.Height+1) which unfortunately exceeds the visible region of the Component or Custom Control.
Did not understand a single word? Ask for a detailed and illustrated description at: aaronreginald@yahoo.com. I would be more that glad to help you out.
The beginning of knowledge is the fear of God
|
|
|
|
|
For the past week I have been looking for anything to help me develop some solution to access the WBEM implementations avaiable on platforms other than Windows.
So far I have only encountered Java based local clients, and very little except in theory for remote access.
Has anyone tried this?
|
|
|
|
|
How can I get the folder information, such as
size
size on disk
contains 900 files, 7 folders
really all I am looking for in the contains part.
**DAN**
|
|
|
|
|
You can obtain number of files and folders from instance of DirectoryInfo class. According to me the size of folder you will have to count yourself.
For example:
<br />
using System;<br />
using System.IO;<br />
<br />
namespace size<br />
{<br />
class Class1<br />
{<br />
[STAThread]<br />
static void Main(string[] args)<br />
{<br />
DirectoryInfo dir = new DirectoryInfo(@"C:\Sybila");<br />
long size = 0;<br />
size += GetSizeOfDirectory(dir);<br />
Console.WriteLine(String.Format("Size of folder {0}", size));<br />
}<br />
<br />
protected static long GetSizeOfDirectory(DirectoryInfo dir)<br />
{<br />
long ret = 0;<br />
foreach(FileInfo fi in dir.GetFiles())<br />
{<br />
ret += fi.Length;<br />
}<br />
foreach(DirectoryInfo di in dir.GetDirectories())<br />
{<br />
ret += GetSizeOfDirectory(di);<br />
}<br />
return ret;<br />
}<br />
}<br />
}<br />
You would obtain the physical size on the disk with WMI...
Tomas Rampas
------------------------------
gedas CR s.r.o.
System analyst, MCSD
TGM 840,
293 01 Mlada Boleslav,
Czech Republic
Telefon/phone +420(326)711411
Telefax/fax +420(326)711420
rampas@gedas.cz
http://www.gedas.com/
------------------------------
To be or not to be is true...
George Bool
|
|
|
|
|
Hi,
I want to transfer image files from one computer to another through Sockets in the form of bytes. But after transfering 10 to 12 images there occur an Exception as follows:
System.IO.IOException
Additional Information : " Unable to read data from the transport connection."
In this case it writes 2 to 3 files and then exception occurs.
Please help me out of this Problem. I will be thankful.
|
|
|
|
|
Are you closing both the input and output streams after each file? It's possible that you're using the maximum amount of remote, open file handles (not sure about this, though). A good way to develop your IO code is to use a try-catch-finally block like so:
Stream inStream = null;
String outStream = null;
try
{
inStream = open image file;
outStream = create output image file;
}
catch (Exception e)
{
}
finally
{
if (inStream != null) inStream.Close();
if (outStream != null)
{
outStream.Flush();
outStream.Close();
}
} The finally block is always executed - even if you return (or transfer control out of your block another way) from your try or catch block. The only time the finally block is NOT executed is when you use Environment.Exit , which unloads the CLR unconditionally.
-----BEGIN GEEK CODE BLOCK-----
Version: 3.21
GCS/G/MU d- s: a- C++++ UL@ P++(+++) L+(--) E--- W+++ N++ o+ K? w++++ O- M(+) V? PS-- PE Y++ PGP++ t++@ 5 X+++ R+@ tv+ b(-)>b++ DI++++ D+ G e++>+++ h---* r+++ y+++
-----END GEEK CODE BLOCK-----
|
|
|
|
|
Just working on the Drag drop problem now, i've looked back over your post and I'm slightly unclear on some things.
Firstly, you said all I needed to do was pack up the object data in .NET using a windows recognised format, which makes sense. But then you say that to send a pointer to a stream I need to use the win32 IObjectData and platform invoke a number of methods.
I'm actualy not sure which is the best option. The desired effect is to create an object with <name>.<extention> and the object data internal to it.
I've discovered the IDataObject in COM, which I have not even looked at, and do not even know what it is. I shall look at COM, but what do I have to do to set up an application to use it?
Can you give me some pointers as to which direction I should be heading now?
I really think I need the source code and documentation for all the shell objects too...
Cata
|
|
|
|
|
The_Catalyst wrote:
I really think I need the source code and documentation for all the shell objects too...
Take a look at the source Tool for viewing Drag and Drop and Clipboard formats[^], at least until Heath can read your post.
-Nick Parker
Last time I checked, all programmers have selective ignorance. I know nothing about 3D graphics. I know a lot about COM. VB gets under people's skin because one can be ignorant of computer architecture and ASM and still get a lot done. - Don Box
|
|
|
|
|
I don't need to do that, I can read them all by putting a break point in and looking at the e.Data() object in the variable viewer in .NET.
I've got no problems with D'n'D, got it all working internaly, and from desktop into program. The problem is interfacing with the API to pass a handle to a stream to the OS so that I can make a file.
I could do it so that I right click on something and open and export dialog box, but i'm one of those stubborn b*****ds that wants things "just so" and won't rest until it's done.
(btw, I intend to know a lot about everything... it's all fascinating to me, just wish i had started programming when I was fifteen, instead of early last year )
Cata
|
|
|
|
|
You don't need the source to any of the COM classes, and all the interfaces are defined either in IDL or header files. Rather than downloading and installing the Platform SDK (or, it can also be installed - and is by default - with VS.NET, though this is an older version but contains what you need), you can look at the definition for the IDataObject interface from MSDN. You'll need to create the interfaces and structs I mentioned in the previous thread.
You just need to create those interface in .NET, using the same signatures (marshaling when necessary). Several attributes - including StructLayoutAttribute and MarshalAsAttribute in the System.Runtime.InteropServices namespace can help you. If you know anything about IDL, you can also create an IDL file that contains forward declarations for the interfaces and struct you need. You compile that IDL file to a TLB (see the documentation for the midl.exe compiler, which is part of the Platform SDK), then use tlbimp.exe (part of the .NET SDK) to import the typelib to a .NET interop assembly. That'll save you from having to define the interfaces from scratch.
Implement COM's IDataObject in a class and pack your information in that. A decent understand of COM is practically necessary to accomplish this.
-----BEGIN GEEK CODE BLOCK-----
Version: 3.21
GCS/G/MU d- s: a- C++++ UL@ P++(+++) L+(--) E--- W+++ N++ o+ K? w++++ O- M(+) V? PS-- PE Y++ PGP++ t++@ 5 X+++ R+@ tv+ b(-)>b++ DI++++ D+ G e++>+++ h---* r+++ y+++
-----END GEEK CODE BLOCK-----
|
|
|
|
|