|
Probably tou get IndexOutOfRangeException when you use args[1] and args[1] is not avaliable. I think that you shoul uncoment this return:
<br />
if (args.Length < 2) {<br />
Console.WriteLine("Usage: PDF2TEXT MyPDF.pdf MYTEXT.txt");<br />
}<br />
Hope this hepls.
protected internal static readonly ... and I wish the list could continue ...
|
|
|
|
|
Thanks for responding! I did that and the console flashes up then disappears and nothing happens beyond that. I'm at loss! If you have anymore suggestion please let me know! Thanks!
Curt
|
|
|
|
|
I think this happens because you supply an insufficient number of parameters. Try this :
if (args.Length < 2) {<br />
Console.WriteLine("Usage: PDF2TEXT MyPDF.pdf MYTEXT.txt");<br />
Console.ReadLine();<br />
<br />
return;<br />
}
protected internal static readonly ... and I wish the list could continue ...
|
|
|
|
|
I am using the System.Threading.Timer timer.
Now if I have a interval set quite low say 10ms it is possible for my timer event handler to be queued as they cannot be prcessed because the UI thread is busy or another application is running. When the UI thread becomes free it then processes all the queued events at the same time.
Is it possible to determine programmatically the number of timer event handlers that are being queued. I want to be able to determine when there is a build up of queued event handlers.
Some code to demonstrate this would be useful.
Also, is it possible to limit the number of timer event handlers that are queued?
Thanks,
Liam
|
|
|
|
|
You could start a separate thread to do the actual work of the timer, that way the thread that is waiting for the event is never busy. This if course only works if the code is thread safe, as you could have several threads running at the same time.
You can use a counter to see how many threads are running. Increase the counter when a task starts and decrease it when it finishes.
If the code can't be made fully thread safe, you could queue the events yourself to be able to keep track of them. Still using a separate thread to do the work (to keep the main thread response to the events), but don't start a new thread until the previous finishes.
---
b { font-weight: normal; }
|
|
|
|
|
I found the question a little odd considering the Timer he's using doesn't use events. It uses a callback delegate executed on a seperate thread out of the thread pool.
So, my question would be, does each tick get its own thread? If so, then in theory, a 10ms time interval could exhaust the thread pool if the callback code takes more than 10ms to execute. What happens to the Timer then? Does the callback get queued up waiting for the thread pool? Does this queue have an upper limit...the size of the stack, maybe?
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
OK my terminology may be wrong. I use the following so I use the the wording "event handler"
tmrTimersTimer.Elapsed += new ElapsedEventHandler(tmrTimersTimerElapsedHandler);
No each tick does not get it's own thread. The callback code takes about 1-2 ms so should complete in plenty of time.
Now if another thread has the processor when my timer elapses it will queue. It will continue to queue timer callbacks. When my code gets the CPU back it will empty the queue and execute all the callbacks.
What I was hoping to achieve was to interrogate the queue that holds the timer callbacks.
|
|
|
|
|
OK. Now you've got me confused. Which timer are you using???
System.Threading.Timer - From your original post. Uses a callback delegate, not an event.
System.Timers.Timer - Uses an event called Elapsed .
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
Dave, sorry for the mixed up information I think I am confusing myself too.
What I have found is both timers:-
System.Threading.Timer
System.Timers.Timer
Will queue and "handler code" if it cannot be processed immediately. the "handler code" will then be processed when CPU time is avaliable.
Whereas
System.Windows.Forms.Timer
Does not queue and the "handler code" is essentially lost.
So I my question applies to both
System.Threading.Timer
System.Timers.Timer
Can I find out if there is a queue of "handlers" (either a callback delegate or an event handler) waiting to be processed?
|
|
|
|
|
Threading.Timers uses the ThreadPool to execute the callback code. You could try to call ThreadPool.GetMaxThreads and ThreadPool.GetAvailableThreads to see how many are in use, but I doubt it'll be that accurate.
Timers.Timer uses Events to notify your app of the Timer Tick, I THINK by sending WM_TIMER messages to your apps message pump. You might try looking into GetQueueStatus[^] to see if it'll return the number of WM_TIMER messages you want.
There is no queue of callbacks maintained anywhere. They are executed by the ThreadPool, which does not keep track of the source, or type, of callback to be executed.
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
I'm trying to detect the interfaces directly inherited by a class. I've tried to use the Type.GetInterfaces method but in a situation like this:
public interface I
{
void f();
}
public interface Ii : I
{
new void f();
void f1();
}
public class CC : Ii
{
public void f(){}
public void f1(){}
} the entire interface types' hierarchy would be returned as a list ( Ii and I instead of Ii )
Is there any way to detect the relationship between two parent-child interfaces? Or: is it possible to obtain only the interfaces directly inherited by a class?
"quot capita, tot sententiæ"
rechi+
|
|
|
|
|
|
We have made a graphics board on (OnPaint Event) . Our assignment is that
where we click in one of the rectangles of the board the event is triggered changing the color of the rectangle . We dont seem to understand . The coordinates of the rectangle are available through the mouse down event.
How is an interaction possible between the above specified events in order
to achieve the goal of color change event triggering .
|
|
|
|
|
Do the changes needed on your internal data to keep track of the color change, then you use the Invalidate method on the element showing the board. That will create a OnPaint event to redraw the element.
---
b { font-weight: normal; }
|
|
|
|
|
Sorry sir/madam
We are not at a professional level of development of right naow and didnt
understand your response while we do appreciate your concern and helping gesture . Please try to explain more more we really need some help .
|
|
|
|
|
What specifically was it in my response that you didn't understand?
---
b { font-weight: normal; }
|
|
|
|
|
here is one example
http://www.codeproject.com/csharp/chess.asp
check this too it is pretty good example
http://www.csharphelp.com/archives/archive246.html
|
|
|
|
|
Yes but that still is too abstruse considering Valil chess seems to be
broken into so many classes and interfaces . And we dont seem to understand prerogative behind the fragmented code . We just need simple answer to our question mouse click (color changing) event triggering on chess board that is part of our project . Any help will be really appreciated .
|
|
|
|
|
check this too it is pretty good example
http://www.csharphelp.com/archives/archive246.html
|
|
|
|
|
Thank you for response . You still have to understand that the aim of our
current project is to change the colour of the rectangle on the board when an event is triggered . (JUST THAT FOR NOW) . Thanks anyways.
|
|
|
|
|
I tried to create you an example of drawing a board and changing that drawing based on a mouse event. I hope you can understand it OK, I have tried to make it as simple as possible just to show the concept.
So, I started with a class, which I named ChessSpace - it represents one sqare in the board. I gave it 3 particular pieces of functionality
1) It knows its color and size
2) It can determine when the mouse is over it, based upon mouse position
3) It knows how to draw itself
Here is the class
<pre><code>
public class ChessSpace
{
// the rectangle ocupied by this space
private Rectangle rect;
// the color to draw this space
private Color col;
// true if the mouse is down over this space
private bool isMouseDown;
// Constructor
public ChessSpace(Rectangle rectangle, Color color)
{
this.rect = rectangle;
this.col = color;
}
public void Draw(Graphics g)
{
// create a new brush to use for drawing this space
using(Brush brush = new SolidBrush(this.col))
{
// fill the rectangle with the color
g.FillRectangle(brush,this.rect);
}
// if the mouse is down in this space draw a red X
if(this.isMouseDown)
{
g.DrawLine(Pens.Red,rect.Left,rect.Top,rect.Right,rect.Bottom);
g.DrawLine(Pens.Red,rect.Right,rect.Top,rect.Left,rect.Bottom);
}
}
// Test a mouse position for intersection with this space
public void CheckMouseDown(Point point)
{
isMouseDown = this.rect.IntersectsWith(new Rectangle(point,new Size(1,1)));
}
// Clear the mouse down flag
public void ClearMouseDown()
{
isMouseDown = false;
}
}
</code></pre>
Next I created a simple nested loop to create me a 10x10 space chess board. This uses a class-variable of type ArrayList to store each instance of ChessSpace. It also uses a simple modulo calculation to alternate black and white spaces. This code was placed in the onload handler of my form:
<pre><code>
private ArrayList chessSpaces = new ArrayList();
protected override void OnLoad(EventArgs e)
{
// Get the width of my panel
int width = this.panel1.Width;
int wIncr = width/10;
// get the height of my panel
int height = this.panel1.Height;
int hIncr = height/10;
int count = 0;
for(int x=0;x<=width;x+=wIncr)
{
for(int y=0;y<=height;y+=hIncr)
{
// Get either black or white
Color color = (count%2)==0 ? Color.Black : Color.White;
// Add a new chess space to the collection
chessSpaces.Add(
new ChessSpace(
new Rectangle(new Point(x,y),new Size(wIncr,hIncr)),
color)
);
count++;
}
}
base.OnLoad (e);
}
</code></pre>
As you will note this uses a variable "panel1" which is a Panel I dropped onto my form (I set its width & height to 300 so it was square).
Lastly, I handled 3 events on the panel - Paint, MouseUp & MouseDown
<pre><code>
private void panel1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
Graphics g = e.Graphics;
foreach(ChessSpace cs in this.chessSpaces)
{
cs.Draw(g);
}
}
private void panel1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
foreach(ChessSpace cs in this.chessSpaces)
{
cs.CheckMouseDown(new Point(e.X,e.Y));
}
this.panel1.Invalidate();
}
private void panel1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
{
foreach(ChessSpace cs in this.chessSpaces)
{
cs.ClearMouseDown();
}
this.panel1.Invalidate();
}
</code></pre>
The end result is a chess board, which draws a red X in the space where you press the mouse button.
HTH!
|
|
|
|
|
hi!
try calling the Invalidate() method on your mousedown event. This method will force your control to repaint.
hope that's what your looking for.
microsoc
|
|
|
|
|
Hi
i want to read the new mail from microsoft outlook.how can i do this using C#.
This is very urgent.
Thanks & Regards
Alok kumar
Alok
|
|
|
|
|
|
Hi
I have did a program such that , i will have two text box name and age in my form..and a button named save. so that when the values entered r in the text box..a xml file is created with those data..
.
Now I can able to create one set of values…. Now what I need is that when again some other value is entered in the textbox. It should also be written in the xml file..but without deleting the other. I mean it should append on the other..
For example: first I entered first as john and 22 for name and age ..it will added in the xml file..now again if I enter charu and 23 as name and age..
Now xml should have john and 22 as well as charu and 23…
And also one more thing is that if I again enter John. It should give a message that it has already been entered. No values should be repeated again. Please help me to do this…..
The coding which I did is as follows.
In side the button click
//save Button
private void button1_Click(object sender, System.EventArgs e)
{
DataSet dataSet = new DataSet();
//read the schema
dataSet.ReadXmlSchema("..\\..\\PlaygroMenu.xsd");
//create a new row
DataRow oValues;
oValues = dataSet.Tables[0].NewRow();
//enter the values
oValues[0] = txtName.Text;
oValues[1] = Convert.ToInt32(txtAage.Text);
//check for duplication
bool hasalready = false;
foreach(DataRow row in dataSet.Tables[0].Rows)
{
if(row.ItemArray[0].ToString().Equals(txtID.Text))
{
hasalready = true;
}
}
//
if(!hasalready)
{
//add the row to the dataset
dataSet.Tables[0].Rows.Add(oValues);
//write the data to a xml file
dataSet.WriteXml("..\\..\\resultdata.xml", XmlWriteMode.WriteSchema);
MessageBox.Show("Saved");
}
else
{
MessageBox.Show("Already Exists");
}
}
private void Form1_Load(object sender, System.EventArgs e)
{
DataSet dataSet = new DataSet();
//read the schema
dataSet.ReadXmlSchema("..\\..\\Menu.xsd");
System.IO.FileInfo file = new System.IO.FileInfo("..\\..\\mydata.xml");
//check whethere there is result xml file...
if (file.Exists)
{
dataSet.ReadXml("..\\..\\resultdata.xml");
}
}
Please help me to do this..
Dhol
|
|
|
|