|
Ok, please refresh me on this.
I call Invalidate; that repaints my form. Then i use DrawString to draw my string on the form.
Both are seperate entities... so whats the catch ????
Can you please brief me on what happening that i am not able to understand?
Thanks.
*** Who said nothing is impossible? I have been doing it for a long time ***
|
|
|
|
|
No, the Invalidate call doesn't repaint the form. It only flags that the form needs repainting. The actual repaint can't be done until the method call has returned, so the system can call the Paint event for all controls in the form.
---
b { font-weight: normal; }
|
|
|
|
|
Hello, may be some of you could help me. I have a winform with FormBorderStyle asigned to None (I need it in that way), and an AXWebBrowser with Dock asigned to Fill. My problem is that the MouseEnter event for the winform only work if I have a part of it visible, but in this case I must have the webbroser filling all the winform, so the event MouseEnter never work. And the webbrowser doen't have a MouseEnter event, so I can't call that event too. I need the event for enter and leaving.
I try:
((Control)this.browser).MouseEnter += new System.EventHandler(this.AlertWindow_MouseEnter);
But doesn't work !!!
Any ideas??
Thansk a lot.
|
|
|
|
|
I am relatively inexperienced in using delegates and asynchronous methods. I read several articles, and then I developed my own code with a mission to improve the performance. Wow! I cannot believe the difference in speed! However, the asynch operation fails sometimes, despite of the fact that it works most of the time. I am really at a loss how to fix this sporadic and erratic behavior.
This is a web application developed with Visual Studio 2003 (.NET framework 1.1). The following C# code snippet shows that I use two delegates to provide a built-in way to call two mainframe DB2 stored procedures, SPX and SPY. I need to execute SPX and SPY many times, each time passing different parameters as per signature of the method. This code is in the server-side Business Logic layer (behind an ASP.NET page to service a client request of a long running report).
With those asynch methods shown in the example, the code compiles and runs incredibly fast when compared to the old-fashioned way of making one call at a time. I was very happy with the performance and the results from the asynch executions were correct.
However, I came across a really peculiar and sporadic error from mscorlib.dll with an error message “object reference not set to an instance of an object”. This error is totally incomprehensible to me. Here are the symptoms: (1) It seems to me the error only occurred sporadically or randomly (because the application runs fine most of the time). (2) Whenever the error occurred, the call stack pointed to one of the many EndInvoke statements (not necessarily a particular EndInvoke statement, but randomly one of the many EndInvoke statements).
I apologize for putting down so much writing and code snippet. I sincerely hope someone can shed some light on this mysterious error. Any help or suggestion is greatly appreciated!
Code Snippet:
public delegate string SPXCaller(int Division);
public delegate string[] SPYCaller(int TimePeriod, int CategoryType, int Division);
public class AsyncMethods
{
public AsyncMethods()
{
}
public string ExecSPX(int Division)
{
//This method contains code to exec DB2 stored procedure SPX
//SPX returns 1 output parameter as string
}
public string[] ExecSPY(int TimePeriod, int CategoryType, int Division)
{
//This method contains code to exec DB2 stored procedure SPY
//SPY returns 5 output parameters as string[5]
}
}
public class BusinessData
{
public DataSet GetData()
{
//Declares a new DataSet to hold all data
DataSet dsData = new DataSet();
//Initiate the Asynchronous calls to exec SPX
AsyncMethods Task1 = new AsyncMethods();
SPXCaller Task1Caller = new SPXCaller(Task1.ExecSPX);
IAsyncResult Result1 = Task1Caller.BeginInvoke(8,null,null);
AsyncMethods Task2 = new AsyncMethods();
SPXCaller Task2Caller = new SPXCaller(Task2.ExecSPX);
IAsyncResult Result2 = Task2Caller.BeginInvoke(10,null,null);
//Initiate the Asynchronous calls to exec SPY
AsyncMethods Task11T = new AsyncMethods();
SPYCaller Task11TCaller = new SPYCaller(Task11T.ExecSPY);
IAsyncResult Result11T = Task11TCaller.BeginInvoke(1,1,8,null,null);
AsyncMethods Task12T = new AsyncMethods();
SPYCaller Task12TCaller = new SPYCaller(Task12T.ExecSPY);
IAsyncResult Result12T = Task12TCaller.BeginInvoke(1,2,8,null,null);
AsyncMethods Task11M = new AsyncMethods();
SPYCaller Task11MCaller = new SPYCaller(Task11M.ExecSPY);
IAsyncResult Result11M = Task11MCaller.BeginInvoke(1,1,10,null,null);
AsyncMethods Task12M = new AsyncMethods();
SPYCaller Task12MCaller = new SPYCaller(Task12M.ExecSPY);
IAsyncResult Result12M = Task12MCaller.BeginInvoke(1,2,10,null,null);
AsyncMethods Task21T = new AsyncMethods();
SPYCaller Task21TCaller = new SPYCaller(Task21T.ExecSPY);
IAsyncResult Result21T = Task21TCaller.BeginInvoke(2,1,8,null,null);
AsyncMethods Task22T = new AsyncMethods();
SPYCaller Task22TCaller = new SPYCaller(Task22T.ExecSPY);
IAsyncResult Result22T = Task22TCaller.BeginInvoke(2,2,8,null,null);
AsyncMethods Task23T = new AsyncMethods();
SPYCaller Task23TCaller = new SPYCaller(Task23T.ExecSPY);
IAsyncResult Result23T = Task23TCaller.BeginInvoke(2,3,8,null,null);
AsyncMethods Task21M = new AsyncMethods();
SPYCaller Task21MCaller = new SPYCaller(Task21M.ExecSPY);
IAsyncResult Result21M = Task21MCaller.BeginInvoke(2,1,10,null,null);
AsyncMethods Task22M = new AsyncMethods();
SPYCaller Task22MCaller = new SPYCaller(Task22M.ExecSPY);
IAsyncResult Result22M = Task22MCaller.BeginInvoke(2,2,10,null,null);
AsyncMethods Task23M = new AsyncMethods();
SPYCaller Task23MCaller = new SPYCaller(Task23M.ExecSPY);
IAsyncResult Result23M = Task23MCaller.BeginInvoke(2,3,10,null,null);
//All calls to BeginInvoke return right away.
//We can immediately move on to do another task.
//The following independent, long running task retrieves PO data
//while waiting for all asynch executions (DB2 store proc) to finish.
DataTable dtPOData = GetPOData();
//Now, retrieve the return values by calling the EndInvoke method.
//Retrieve results from SPXCaller
string Ret1 = Task1Caller.EndInvoke(Result1);
string Ret2 = Task2Caller.EndInvoke(Result2);
//Retrieve results from SPYCaller
string[] Ret11T = Task11TCaller.EndInvoke(Result11T);
string[] Ret12T = Task12TCaller.EndInvoke(Result12T);
string[] Ret11M = Task11MCaller.EndInvoke(Result11M);
string[] Ret12M = Task12MCaller.EndInvoke(Result12M);
string[] Ret21T = Task21TCaller.EndInvoke(Result21T);
string[] Ret22T = Task22TCaller.EndInvoke(Result22T);
string[] Ret23T = Task23TCaller.EndInvoke(Result23T);
string[] Ret21M = Task21MCaller.EndInvoke(Result21M);
string[] Ret22M = Task22MCaller.EndInvoke(Result22M);
string[] Ret23M = Task23MCaller.EndInvoke(Result23M);
//Some source code omitted here. The code packs all results
//into a dataset dsData with multiple datatables.
return dsData;
}
}
swanmynova
|
|
|
|
|
Well, upon initial glance it all seems ok...what line of code is it crashing on? You should first find out where the null reference exception is occurring; what's most likely occurring is that some object is being accessed by multiple threads. One of the threads sets the object to null, then another thread tries to use that object after the fact, causing the error. But it's difficult to debug it unless you know where the error is occurring.
Tech, life, family, faith: Give me a visit.
I'm currently blogging about: How 'bout a little guitar now?
The apostle Paul, modernly speaking: Epistles of Paul
Judah Himango
|
|
|
|
|
Hi Judah,
Thank you very much for your reply. As I mentioned in my original message, the line of code that caused the reference exception is one of the many EndInvoke statements (not always the same one, but one of them randomly). Like I said before, the application works most of the time. So, this leads me to think that there is no programming error. But sporadically it crashed on one of the EndInvoke statements as indicated by the Exception Management. So this bug is really incomprehensible to me.
Thanks again,
SL
|
|
|
|
|
When you're executing asynchronous code, EndInvoke will re-throw any unhandled errors that occurred somewhere in your asynchronous code blocks (the code that gets executed on background threads). This is by design.
What I would do is put some try/catch around the code that gets executed on a background thread. Log it somehow by outputting to the console, a file, anything that lets you track it down when it happens. Then when it happens, make sure you log the stack trace, the error message, and any other error information that will help you solve it. Also, in your asynchronous code, validate all the data you're dealing with. If you're using an object that is shared among the other threads, make no assumptions about it! Check if such resources are null or in an invalid state before using them.
|
|
|
|
|
Thank you, I will dig in further.
|
|
|
|
|
Has anyone seen a program that will tell you the FLOPS of a processor in C#?
|
|
|
|
|
I'm having a slight problem with flags. I downloaded a small class from CP called Task Scheduler. It contains an enum called DaysOfTheWeek. This enumeration contains all the seven days of the week. This enumeration has the Flag option set to on and as i read somewhere, multiple flags can be passed at once by using the pipe operator (|). Now the class contains a function which takes the enumeration DaysOfTheWeek as a parameter. When I have to call the function, I can easily do so by writing
TestFunction(DaysOfTheWeek.Monday)
That was easy. Now, I have seven check boxes on my form called chkSunday, chkMonday....chkSaturday. Now, I have to call the function by passing the flags which in turn depend on the check boxes that are selected. For example, if the user has selected chkMonday and chkSunday, I would call the function like this
TestFunction(DaysOfTheWeek.Monday | DaysOfTheWeek.Sunday)
This is where the the problem lies. i can't possibly write a set of if else statements that take into account all the possible combinations of checkboxes being selected and appropriately calling the function. How do I do this?
I thought of this but it doesnt work:
<br />
TaskScheduler.DaysOfTheWeek enmDays;<br />
if (chkSunday.Checked == true)<br />
enmDays = enmDays | DaysOfTheWeek.Sunday;<br />
if (chkMonday.Checked == true)<br />
enmDays = enmDays | DaysOfTheWeek.Monday;<br />
if (chkTuesday.Checked == true)<br />
enmDays = enmDays | DaysOfTheWeek.Tuesday;<br />
if (chkWednesday.Checked == true)<br />
enmDays = enmDays | DaysOfTheWeek.Wednesday;<br />
if (chkThursday.Checked == true)<br />
enmDays = enmDays | DaysOfTheWeek.Thursday;<br />
if (chkFriday.Checked == true)<br />
enmDays = enmDays | DaysOfTheWeek.Friday;<br />
if (chkSaturday.Checked == true)<br />
enmDays = enmDays | DaysOfTheWeek.Saturday;<br />
TestFunction(enmDays);<br />
|
|
|
|
|
Standard question #1:
What do you mean by "not working"?
Mridang Agarwal wrote: i can't possibly write a set of if else statements that take into account all the possible combinations of checkboxes being selected and appropriately calling the function.
Yes, you can. It's only 128 combinations. I can very well understand if you don't want to do it, but it's clearly possible to do.
---
b { font-weight: normal; }
|
|
|
|
|
Why not just use a loop?
ArrayList checkBoxes = new ArrayList();
chkSunday.Tag = DaysOfTheWeek.Sunday;
checkBoxes.Add (chkSunday);
...
chkSunday.Tag = DaysOfTheWeek.Saturday;
checkBoxes.Add (chkSaturday);
DaysOfTheWeek selectedDays = DaysOfTheWeek.None;
for (int nDay=0; (nDay < checkBoxes.Count); nDay++) {
CheckBox cb = checkBoxes[nDay] as CheckBox;
if (cb.Checked) {
if (selectedDays == DaysOfTheWeek.None)
selectedDays = (DaysOfTheWeek) cb.Tag;
else
selectedDays |= (DaysOfTheWeek) cb.Tag;
}
} /ravi
My new year's resolution: 2048 x 1536
Home | Music | Articles | Freeware | Trips
ravib(at)ravib(dot)com
|
|
|
|
|
There isn't a DaysOfTheWeek.None . What do I do now?
|
|
|
|
|
Make up your own enum (eg: MyDayOfTheWeek ) or use a set of days of the week, where the empty set implies "no day selected".
/ravi
My new year's resolution: 2048 x 1536
Home | Music | Articles | Freeware | Trips
ravib(at)ravib(dot)com
|
|
|
|
|
bool checkMonday = true;
bool checkTuesday = true;
bool checkWednesday = true;
bool checkThursday = false;
bool checkFriday = false;
bool checkSaturday = false;
bool checkSunday = true;
DaysOfTheWeek day=(DaysOfTheWeek)0x00;
day |= (DaysOfTheWeek)((checkMonday ? 0x01 : 0x00) << Convert.ToInt32(DaysOfTheWeek.Monday));
day |= (DaysOfTheWeek)((checkTuesday ? 0x01 : 0x00) << Convert.ToInt32(DaysOfTheWeek.Tuesday));
day |= (DaysOfTheWeek)((checkWednesday ? 0x01 : 0x00) << Convert.ToInt32(DaysOfTheWeek.Wednesday));
day |= (DaysOfTheWeek)((checkThursday ? 0x01 : 0x00) << Convert.ToInt32(DaysOfTheWeek.Thursday));
day |= (DaysOfTheWeek)((checkFriday ? 0x01 : 0x00) << Convert.ToInt32(DaysOfTheWeek.Friday));
day |= (DaysOfTheWeek)((checkSaturday ? 0x01 : 0x00) << Convert.ToInt32(DaysOfTheWeek.Saturday));
day |= (DaysOfTheWeek)((checkSunday ? 0x01 : 0x00) << Convert.ToInt32(DaysOfTheWeek.Sunday));
TestFunction(day);
-- modified at 22:12 Wednesday 29th March, 2006
|
|
|
|
|
hi!
I'm doing a project in image processing. I have implemented sobel edge detection.But the edge is not thin.
I tried to implement canny edge detection. But I don't understand how to do non maximum suppression.If anyone has canny edge detection implemented please please share it.
any edge tracking algorithm for thinning the edges will be helpful.
signing off is preci
|
|
|
|
|
|
Thankyou Ravi.
I have already been to the links the you have specified.I have also implemented canny edge detection in vb.net but the results are not good, meaning the edges are not thin (preferably a single line of pixels).
Is there some way to do that? Non maximum suppression is not very helpful. If you know how to track the edges please help.It's urgent.
signing off is preci
|
|
|
|
|
Sorry, my knowledge of image processing resembles the null set.
That being said, have you seen the Rothwell[^] method? Any better than Sobel and canny?
/ravi
My new year's resolution: 2048 x 1536
Home | Music | Articles | Freeware | Trips
ravib(at)ravib(dot)com
|
|
|
|
|
Hi again!
I have worked around the problem.I added some new conditions and some new ideas and the results were good.But I still work to do.I greatly appreciate your help. Thank you
again!!
signing off is preci
|
|
|
|
|
I want to get computer name, but i dont know how to do.
help me!
Thanks a lot
superdragon
|
|
|
|
|
I have found it, i used SystemInformation.ComputerName to get computername
superdragon
|
|
|
|
|
i have chekedlistbox, it has some items in it,when it runs, after checking some items, i want to indecate which items is checked, but i dont know what properties to indicate that.
please help me to solve it.
Thanks for helpings.
superdragon
|
|
|
|
|
i have found it. Thanks everyone!
superdragon
|
|
|
|
|
I'm not even sure how to ask this but i've got a problem that has me stumped and i'm hoping someone can shed some light on it.
I've got a winform application written in c# 2.0 that has most of it's content and controls wired to a remote sql server 2000 database. now there is one specific control tha is acting weird on another computer it's a standard NumericUpDown Control when the form it belongs to is shown it's min and max value as well as it's current value are set based on criteria from the main form. now i've run the program on windows xp, xp 64 and server 2003 enterprise on my computer and it works fine in all of them. but when i took it to the computer it was supposed to be run on after the install ran it installed the .net framework and registered everything with caspol. Now once the program is run and everything else works fine but when the form with the numericupdown control is loaded the numericupdown control has some arbitrary negative number passed to it like -17 or -16 and i have no clue why it would do that on one xp pro machine and not on another.
Anyway i hope someone can at least point me in the right direction
Thanks
Ryan
|
|
|
|
|