|
Well no it's normal - you abort the thread after all.
The CriticalRegion just tells the CLR that you app will have major problems if you run into an exception in this region!
Here is the explanation from MSDN:
Hosts of the common language runtime (CLR), such as Microsoft SQL Server 2005, can establish different policies for failures in critical and non-critical regions of code. A critical region is one in which the effects of a thread abort or an unhandled exception might not be limited to the current task. By contrast, an abort or failure in a non-critical region of code affects only the task in which the error occurs.
For example, consider a task that attempts to allocate memory while holding a lock. If the memory allocation fails, aborting the current task is not sufficient to ensure stability of the AppDomain, because there can be other tasks in the domain waiting for the same lock. If the current task is terminated, other tasks could be deadlocked.
When a failure occurs in a critical region, the host might decide to unload the entire AppDomain rather than take the risk of continuing execution in a potentially unstable state. To inform the host that your code is entering a critical region, call BeginCriticalRegion. Call EndCriticalRegion when execution returns to a non-critical region of code.
Using this method in code that runs under SQL Server 2005 requires the code to be run at the highest host protection level.
I guess you want a way to make this code run no matter if a abort is called rigth? - Well you can't sorry (you can handle the ThreadAbortedException but only to die gracefully)
|
|
|
|
|
Hmm... let mi ask this simple question - so what exactly critical regions do? They warn CLR. So what? What does it warning do?
modified on Wednesday, February 13, 2008 9:23 AM
|
|
|
|
|
Hey guyz
Im having a problem with a userControll im writing. Basicly its a label that changes color based on the "status" of it red, yello or green. and then i use that to disply errors and general info like "Enter User Details Here"
Now on some of the forms of my app the posible error messages is longer than the form itself for example "Database Connection No Longer Avalibal > Transaction Terminated". So when i got at work this morning i decided to make the labels text scroll past.
this is the code i have so far (its not my actual controll, its just a test project)
its a form with a label on it
public partial class Form1 : Form
{
char charTemp;
string tempMessage = "";
string message = "";
TimerCallback timeCB;
System.Threading.Timer timer;
public Form1()
{
InitializeComponent();
}
public void scrollText(object state)
{
message = label1.Text;
charTemp = message[0];
for (int i = 0; i < message.Length - 1; i++)
{
tempMessage += message[i + 1];
}
tempMessage += charTemp;
label1.Text = tempMessage;
tempMessage = "";
}
private void Form1_Shown(object sender, EventArgs e)
{
timeCB = new TimerCallback(scrollText);
timer = new System.Threading.Timer(timeCB, null, 0, 1000);
}
}
now the obvios error i get is "Cross-thread operation not valid". But there must be a way to update the labels text after the 2nd thread runs its method
any ideas on how i can get it working?
Thanx
Harvey Saayman - South Africa
Junior Developer
.Net, C#, SQL
think BIG and kick ASS
|
|
|
|
|
|
hey
i just read thru that... i dont quite understand it tho?
Harvey Saayman - South Africa
Junior Developer
.Net, C#, SQL
think BIG and kick ASS
|
|
|
|
|
|
It boils down to this: Don't update controls from any thread other than the thread that created them. You're breaking this rule by creating a new thread (timer ) and then manipulating a control from that (label1.Text ). As suggested you can use Control.Invoke to fix the problem or, and that would be my suggestion, use a System.Windows.Forms.Timer instead, which fires the Tick on the main UI thread.
Standards are great! Everybody should have one!
|
|
|
|
|
but then the user wouldnt be able to actually fill out the form? the method that scrolls the text is in an infanate loop so to speak...
Harvey Saayman - South Africa
Junior Developer
.Net, C#, SQL
think BIG and kick ASS
|
|
|
|
|
Nope it's not, I don't see any while(true) loop in it. It executes once a second and then the thread returns to any other tasks it might have. Since it doesn't do much work the user won't notice it's on the same thread as the ui. If it was, you could use a BackgroundWorker to do all non UI related work, then use the BackgroundWorker 's ReportProgress method to do any UI updates.
Standards are great! Everybody should have one!
|
|
|
|
|
ok u might have a point there!
so how would i go about using the UI thread to execute ScrollText() once a second?
Thanx
Harvey Saayman - South Africa
Junior Developer
.Net, C#, SQL
think BIG and kick ASS
|
|
|
|
|
|
Here is an example of how to use Invoke .
Put this at the top of your form or class.
<code> delegate void SetTextCallback(string text);
private void SetInfo(string text)
{
if (this.txtInfo.InvokeRequired)
{
SetTextCallback d = new SetTextCallback(SetInfo);
this.Invoke(d, new object[] { text });
}
else
{
this.txtInfo.Text = text;
}
}</code>
Within your thread to set txtInfo.Text do this:
SetInfo("Hello World");
You always pass failure on the way to success.
|
|
|
|
|
I'm like everyone else here. I want the benefits of the Binary Serializer but I want the human readability that XML / Soap gives you.
Binary Serilization: Almost perfect except its not Human readable.
Soap Serialization: Doesn't work on Generics in .net 2.0 And/OR doesn't serialize private memeber but only properties (useless)
XML Serializer: Flatout Useless. Only serializates public members. Requires huge amounts of markup.
What I need is a serializer that
1) Saves the private/public members (like the binary formatter) (Not the properties which is pointless)
2) It needs to perform deep serialization (like the Bin Formatter)
3) It needs to be human readable.
4) It sholdn't require explicite markup of every member (like XML requires).
MY GOD. Is there not an xml/ soap serializer that is functionaly equivalent to the Binary Serializer available?
|
|
|
|
|
Well you can take your reflection knowledge and write one yourself (it's not that difficult).
Or you can sit down and think for a while why Soap and XML-serializers don't behave the way you want them to.
Let me put it this way: Binary Ser. was build for .net purposes and your class definition etc. are serialized with it.
SOAP/XML was build to be plattform-independend. So you should make sure that everyone understands your data!
|
|
|
|
|
How do you go about creating your own packet to send over TCP?
|
|
|
|
|
|
What I meant to ask was how would you go about creating your own protocol so the client knew what type of message it was recieving (could be text or other type of data). Also would it be ok to create 2 seperate sockets, one for sending and one for recieving?
Thankyou
|
|
|
|
|
u can follow the generic format ie.
____________________________
command |length |data |CRC |
-------------------------------------
if you are sending as string separate each with a spl char. like "$".
or if it is byte array, convert the formated string to byte array using this
ASCIIEncoding.GetBytes(stringpkt)
qn#2 it is ok to send it as 2 packets, as long as you have identity for packets & also the client must understand ur protocol format. eg. you can maintain one field on the packet to identify "Packet is over or not", if not over, client will listen for rest of the packets
regards,
Srini
modified on Wednesday, February 13, 2008 10:12 PM
|
|
|
|
|
|
Wrong forum?
SkyWalker
|
|
|
|
|
How can I retrive particular column data from Dataset?
when I write the " mydataset.tables[0].columns[0][0] " line
in watch windows It works properly
but
I can't use this solution in my program .it doesn't work . I don't know why.
|
|
|
|
|
YourDataSet.Tables[0].Rows[0][0]
SkyWalker
|
|
|
|
|
thank you so much
|
|
|
|
|
Hi,
In my appplication i have requirement to use two ListViews :-lvAvailList (has the Available Items) and lvSelList (has the selected items),the View of ListViews is set to Details and the ListViews has two columns.
In my form i have a listbox,the multiselection property of the listbox is set to true.
say the listbox is populated with items :For example
1.Fruits
2.Vegetables
3. Books
When ever the user changes selection on the listbox,the lvAvailList has to be populated with coresponding items.
For Exmple:
If Fruits and Vegetables are selected in the ListBox,then the lvAvailList has to be populated with items
Col1(Type) Col2(Sub Type)
Fruits Apple
Fruits Grapes
Fruits Banana
Vegetables Potato
Vegetables Onion
Now if the user selects Fruits and Books in the ListBox,then the lvAvailList has to be populated with items
Col1(Type) Col2(Sub Type)
Fruits Apple
Fruits Grapes
Fruits Banana
Books C
Books C++
While adding items to the lvAvailList , we need to check if the items is already in the lvSelList (user can select an item in lvAvailList and move it to the lvSelList), if so item should not be added to the lvAvailList.
Since with the ListView the loading was slow and huge number of records have to be populated in ListViews (in actual senario up to 64k),i tried using the FastListView and the result great increase in performance !!!.Thanks for such a nice control.
1.Is using the FastListView appropriate in this case??
2.If using the FastListView is appropriate,how can i sort the items in the FastListView columns by the item Tag.
Thanks and Regards
Vinutha
Vinutha
|
|
|
|
|
HI ALL,
Now I am facing a problem with webservice callback.We called a webmethod asynchronously from a webpage.Then the page will be rendered from the server to the client,but the result of the called method may be reaches the webservice after rendering the site.So the webservice become not able to send the result to webform.My question is how to inform the webform asynchronously without polling for its completion and too much delay?
Plz Help................
|
|
|
|