|
Thanx!
At first I missed the option "show all options". There it was when I enabled it.
A good programmer is someone who always looks both ways before crossing a one-way street. (Doug Linder)
|
|
|
|
|
Why does this event fire so often? I am using a binding source navigator for navigating a dataset, and it is giving me a world of grief. Whenever I click the next button I want to change the picture on the screen to reflect the new record. It looks like this:
DataRowView myRow = (DataRowView)this.dtObsDataBindingSource.Current;
try
{
this.pbPhoto.SizeMode = PictureBoxSizeMode.StretchImage;
this.pbPhoto.Image = Image.FromFile(myRow["txtPicPath"].ToString() + myRow["txtPhotoName"].ToString());
this.tbl_ref_categoryTableAdapter.Fill(this.ds_review.tbl_ref_category);
this.tbl_ref_defectTableAdapter.Fill(this.ds_review.tbl_ref_defect);
this.cboCategory.SelectedValue = myRow["intCategoryId"];
if (this.cboCategory.SelectedIndex != -1)
{
this.tbl_ref_defectTableAdapter.FillByCategoryId(this.ds_review.tbl_ref_defect, (int)this.cboCategory.SelectedValue);
}
this.cboDefect.SelectedValue = myRow["intDefectId"];
this.cboLocation.SelectedValue = myRow["intLocationId"];
}
catch (NullReferenceException)
{
this.pbPhoto.SizeMode = PictureBoxSizeMode.CenterImage;
this.pbPhoto.Image = Image.FromFile(System.Windows.Forms.Application.StartupPath.ToString() + "\\noPic.jpg");
}
Long story short, the fact that this event fires three times causes me some grief, what is causing it to fire so many times? Is there a better event choice to handle this?
Cheers, --EA
|
|
|
|
|
Did you read the docs? Its *SUPPOSED* to get called a lot:
I know this isn't "CurrentItemChanged", but it says in the docs that "CurrentItemChanged" is equivalent to "CurrentChanged" and will get raised the same number of times:
The CurrentChanged event is raised whenever the Current property changes for any of the following reasons:
The current position of the List changes.
The DataSource or DataMember properties change.
The membership of the underlying List changes, which causes Position to refer to a different item. Examples include adding or deleting an item before the current item, deleting or moving the current item itself, or moving an item to the current position.
The underlying list is refreshed by a new sorting or filtering operation.
When this event is triggered, the Current property will already contain its new value.
CurrentChanged is the default event for the BindingSource class.
You simply need to filter out the conditions you don't care about. Or, if you don't have enough info to do that [EDIT: in the args I mean] (which is entirely possible), use a different event.
|
|
|
|
|
No I did not read the documentation, it frequently muddies the waters unnecessarily and fails to explain what I need to understand. In this instance you are right that the eventargs do not provide enough information to help, but I was able to go off of your idea and add the following:
if (myRow != (DataRowView)this.tbl_cdf_observationBindingSource.Current)
Which allows me to avoid processing everything if the datarow has not actually changed.
Cheers, --EA
|
|
|
|
|
Try using PositionChanged[^] instead, if all you require is to get the next/prev record.
The standard NavBar Next and Prev buttons just do Position +=(-=) 1;
Henry Minute
Do not read medical books! You could die of a misprint. - Mark Twain
Girl: (staring) "Why do you need an icy cucumber?"
“I want to report a fraud. The government is lying to us all.”
I wouldn't let CG touch my Abacus!
When you're wrestling a gorilla, you don't stop when you're tired, you stop when the gorilla is.
|
|
|
|
|
Thank you, PositionChanged was a much better event for this particular situation than CurrentItemChanged. In my coding infancy I was looking for a method to change the picture when navigating a bindingsource and CurrentChanged was recommended. Now in my coding toddler days this is a better option. Thanks for the metaphorical programming potty training.
Cheers, --EA
|
|
|
|
|
I've been tasked with digging into an apparent memory leak in our project, and I have found something that sticks out to me (but wanting to hear opinions on this before I escalate this)
Architectural drive-by:
WCF Services, Repository Pattern. Repository references a service client and wraps around the call to the client Async methods.
public void GetAccount(int customerId, int accountId, Action<Entities.Account< onComplete>, Action<Exception> onError)
{
ServicesClient client = new ServicesClient();
client.GetAccountCompleted +=
(sender, response) =>
{
if(response.Error == null)
{
Entities.Account account = Mapper.Map<Account, Entities.Account>(resposne.Result.Account);
account.AccountState = Mapper.Map<AccountStatus, Entities.AccountState>(resposne.Result.AccountStatus);
account.AccountType = Mapper.Map<AccountType, Entities.AccountType>(resposne.Result.AccountType);
account.Location = Mapper.Map<Location, Entities.Location>(resposne.Result.Location);
account.Location.Address = Mapper.Map<Address, Entities.Address>(resposne.Result.Address);
this.GetAccountStateInfo(account,onComplete, onError);
}
else
{
onError.Invoke(response.Error);
}
};
client.GetAccountAsync(
new GetAccountRequest()
{
AccountId = accountId,
CustomerId = customerId,
SessionId = this.Logger.SessionId
});
}
ok...is there any reason why client.GetAccountCompleted would NOT need to be deregistered? (It is not. The block above contains a += but nowhere could I find a matching -=)
Thanks a lot for your time!
[edit to add:]
To clarify, ANTS Memory Profiler is reporting growth in unmanaged memory no matter what operation occurs and the Gen2 Heap seems to continually grow until an OOM Exception crashes the app.
We're using Telerik's Silverlight 4 controls, and it seems as if there *may* be some trouble coming from them (when I profile their online demo, I can repeat the memory growth pattern)
I have several leads on what the cause of this problem could be, but at this point I am uncertain whether this is "death by a thousand cuts" or a "decapitation." I probably should have realized that the above question I asked was not likely to be the root of the problem...the serviceClient does not implement IDisposable, but at this point my head is in "Plug the hole. Plug the hole. Plug the hole." mode.
btw....In the code snippet above, "Mapper" is the AutoMapper from Codeplex
"I need build Skynet. Plz send code"
modified on Thursday, March 31, 2011 9:51 AM
|
|
|
|
|
There could be, does client.GetAccountCompleted override the add method and keep a list of WeakReference's?
|
|
|
|
|
I don't see anything wrong here. client is a local variable, it dies when the GetAccount() method returns, what has been added/removed to its events is irrelevant for its own survival. In my experience, one seldom needs to deregister an event handler. Things would change however if there were some extra code that would store a reference to client, so it really depends on the "Map returned result to Client entity" part, which you didn't show.
Luc Pattyn [Forum Guidelines] [My Articles] Nil Volentibus Arduum
Please use <PRE> tags for code snippets, they preserve indentation, improve readability, and make me actually look at the code.
|
|
|
|
|
Actually, not saying that is the issue here, but I recently worked on a bit of code where not unsubbing the handler caused a COM object to stick around and not get GC'ed even though it went out of scope.
If that object is only getting created once, it wouldn't be a visible issue, but if its getting created repeatedly, I'd unsub the handler.
|
|
|
|
|
Ah, I was only considering .NET objects; there aren't many COM objects in my recent past. And of course there is nothing wrong with unsubscribing at all.
SledgeHammer01 wrote: if its getting created repeatedly
for debugging purposes, I tend to make my objects artificially large, and sometimes create a multitude of them. That way leaks aren't likely to go unnoticed!
Luc Pattyn [Forum Guidelines] [My Articles] Nil Volentibus Arduum
Please use <PRE> tags for code snippets, they preserve indentation, improve readability, and make me actually look at the code.
|
|
|
|
|
I'll go ahead and add that mapping block for completeness' sake. (I'll just edit my original post to include it)
"I need build Skynet. Plz send code"
|
|
|
|
|
Just try unsubbing the handler and see if that fixes it. If not, move on to the next place. I kind of still think you need to unsub it . Also, I haven't seen your Mapper code. That could be holding on to a ref as well.
|
|
|
|
|
It would have overridden the add method and save the delegate in a static list - evil and unlikely, but possible
|
|
|
|
|
OK, the added code does not refer to client at all, so it still gets collected properly in the end.
The new information is that there is unmanaged memory involved. To deal with that, you should call Dispose(), or apply the using statement, on objects you no longer need if their class offers a Dispose() method; that includes all WinForms Controls, Fonts, Pens, Brushes, Graphics, etc (except for the ones handed to you, e.g. PaintEventArgs.Graphics). I can't help you out in detail, I also am not familiar with Telerik controls. However let's say ServiceClient is a Panel, then you need to call its Dispose().
Luc Pattyn [Forum Guidelines] [My Articles] Nil Volentibus Arduum
Please use <PRE> tags for code snippets, they preserve indentation, improve readability, and make me actually look at the code.
|
|
|
|
|
Ah. Silverlight. Notorious for leaking like buggery I'm afraid.
|
|
|
|
|
Really? and is there some good reason for that, or have they just been careless?
Luc Pattyn [Forum Guidelines] [My Articles] Nil Volentibus Arduum
Please use <PRE> tags for code snippets, they preserve indentation, improve readability, and make me actually look at the code.
|
|
|
|
|
Careless. There was a little bit of a dust up about it on the WPF Disciples list about it. I don't think they will make me an MVP now
|
|
|
|
|
Pete O'Hanlon wrote: I don't think they will make me an MVP now
Well, maybe they should, but not before you helped them plugging all the leaks.
Luc Pattyn [Forum Guidelines] [My Articles] Nil Volentibus Arduum
Please use <PRE> tags for code snippets, they preserve indentation, improve readability, and make me actually look at the code.
|
|
|
|
|
Sadly they don't seem interested in fixing the leaks. That's what we were arguing about.
|
|
|
|
|
Do you recall the location of the discussion over on WPF Disciples? (can you provide a link?)
"I need build Skynet. Plz send code"
|
|
|
|
|
I believe the comment was in this[^] thread. This was the bitterest thread that we kicked off - the problem is, it may also be in one of the Disciples private threads.
Actually, I've found the very comment in that thread:
"Here is the hard question I will be asking: Why are memory leaks in Silverlight 4 such a low priority for Microsoft? I cringe every time somebody comes on the WCF RIA Services forum waving an ANTS report trying to figure out where their memory is going."
|
|
|
|
|
I am trying to test a web service that is encapsulated in an IP Phone which is only accessible through HTTPS. I tried HTTP, but it redirects to the secure site.
The system is not connected to the internet and I would like to know if there is a way to make my .NET client ignore the fact it cannot verify the certificate and just proceed with the request. I am using VS 2010 and the class System.ServiceModel.ClientBase<t> (the client code generated with the Add Service Reference feature).
Thank you
|
|
|
|
|
You should be able to do this by overriding the client certificate:
System.Net.ServicePointManager.ServerCertificateValidationCallback = ((sender, certificate, chain, sslPolicyErrors) => true); Obviously you want to only apply this during your testing phase, so I'd surround this in a conditional if I were you.
|
|
|
|
|
Absolutely. We just want to test how well we can integrate with the phones and deploy custom services.
Thanks for the answer, it is working well.
|
|
|
|
|