|
The error is at
client.SendAsync(message, userState);
Console.WriteLine("Sending message... press c to cancel mail. Press any other key to exit.");
string answer = Console.ReadLine();
message.Dispose();
SendAsync does nothing else than sending the message asynchronously, meaning that at the point you dispose the message , the asynchrobnous send routine is still trying to access the message object. Leave away the dispose part, since the message is automatically disposed by the Garbage Collector once it isn't in use anymore.
The console is a black place
|
|
|
|
|
|
Read the forum posting guidelines here. This is not a question, and not appropriate for this forum.
«At the still point of the turning world. Neither flesh nor fleshless;
Neither from nor towards; at the still point, there the dance is
...
Neither ascent nor decline. Except for the point, the still point,
There would be no dance, and there is only the dance»
T.S. Elliot, The Four Quartets: "Burnt Norton"/xml>
|
|
|
|
|
Most barcode readers will return the barcode data in text form, so you don't need to do a lot of programming to work with them.
|
|
|
|
|
+5
There are only 10 types of people in the world, those who understand binary and those who don't.
|
|
|
|
|
Thanks. Amazing how many people ask how to program their reader before even investigating which one they are going to buy.
|
|
|
|
|
True. I remember years ago having to include support for a barcode reader and my initial thoughts were "Great, now I have to learn how to interface with another device." Turns out it just returned it as text to whatever control had focus.
Too easy. No coding required.
There are only 10 types of people in the world, those who understand binary and those who don't.
|
|
|
|
|
I am trying to get this VB code to a C# code, and I know I need to use ToString, but I cannot get the code to run correctly, it gives errors for everything. The code is a cartitem and its trying to get the quantity and adding the product price to it, here is what I have:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
public class CartItem
{
public Product Product;
public int Quantity;
public string Display()
{
return (Product.Name + (" ("
+ (Quantity.ToString() + (" at "
+ (FormatCurrency(Product.UnitPrice) + " each)")))));
}
}
|
|
|
|
|
Probably no for "everything".
C# does not have a "FormatCurrency" function. It does not have functions at all. You will have to find some C# way to format the unitprice.
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
|
|
|
|
|
You can format currency like this:
decimal value = -19230023.33M;
string format = string.Format("{0:C}", value);
|
|
|
|
|
You could create an extension method that returns the value formatted as a currency.
string currency = value.FormattedCurrency();
"There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult." - C.A.R. Hoare
Home | LinkedIn | Google+ | Twitter
|
|
|
|
|
I could, but then again, I'm not the one asking the question
|
|
|
|
|
Oops let me re-post this to the OP
"There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult." - C.A.R. Hoare
Home | LinkedIn | Google+ | Twitter
|
|
|
|
|
I HIGHLY suggest you read up on string.Format() . It'll make your life sooooo much easier than trying to figure out which quote marks pair up with which.
return string.Format("{0} ({1:N0} at {2:C2} each)", Product.Name, Quantity, Product.UnitPrice);
|
|
|
|
|
Exactly. And it is an important step for globalization / localization, as the order of words may be different in other languages.
|
|
|
|
|
You could create an extension method that returns the value formatted as a currency.
string currency = value.FormattedCurrency();
"There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult." - C.A.R. Hoare
Home | LinkedIn | Google+ | Twitter
|
|
|
|
|
Hi there.
The .NET applications I provide for our test team are using the same set of assemblys. Depending on which test teams uses the app the corresponing assembly will be loaded at runtime.
Easy stuff. One must just handle the AppDomain.ResolveAssembly event properly and everything is fine. So when the app isn't able to resolve a type I simple check all loaded assemblys.
Doing that i came up with the idea, that if I cannot find a depended assembly it is properly because it is missing in the apps working directory. So I could copy it from our file server to the WD and simple load it.
With this mechanism I am able to roll out a new app simple by distributing the executable and on start the app will collect it's dependencies by itself.
Neat stuff. Worked fine for anything invovling WinddowsForms and WPF.
Now with console application the hole thing went kaputt.
Instead of any event being triggered the hole console application just crashed. NO UnhandledException even or any catch just a big kernel32 APPCRASH.
After a hole day of brainfuck, I found a solution but I don't get it.
Here is the thing:
Normally console applications aren't that big so the mayor coding stays in the main(string[] args) method.
Here is a constructed example:
public static void Main(string [ ] args)
{
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler ( ConsoleExceptionHandler.CurrentDomain_UnhandledExceptionConsole);
AppDomain.CurrentDomain.AssemblyResolve += (AssemblyResolver.CurrentDomain_AssemblyResolve);
Console.WriteLine ( typeof ( JobData ).ToString () );
Console.WriteLine ( typeof ( TSExecTask ).ToString () );
Console.WriteLine ( typeof ( ReportingTask).ToString () );
Console.ReadLine ();
}
which does not work. But if I move the three Console.WriteLine in a separate class (ConsoleCrap) it works.
public static void Main(string [ ] args)
{
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler ( ConsoleExceptionHandler.CurrentDomain_UnhandledExceptionConsole);
AppDomain.CurrentDomain.AssemblyResolve += (AssemblyResolver.CurrentDomain_AssemblyResolve);
System.Threading.Thread.Sleep ( 100 );
new ConsoleCrap ().WriteSome ();
Console.ReadLine ();
}
I thought maybe, by postponing the point where the missing types are needed, the event has the nessesary time to collect the assemblys.
But the AsssemblyResolve event isn't asynchronous. So the actual execution flow is on hold while the type is not resolved.
On the other hand maybe the issue is, that by using the missing types directly the class containing the the static main() method cannot be laoded as it is missing the assembly before the AssemblyResolve event is registered.
So my question to all knowing more of coding then myself. (basically the rest of the universe)
Maybe someone si abel to givve ma some insight?
|
|
|
|
|
Console-applications come from the era of single-threading. There is no message-pump, so yes, it will be blocking. And yes, any types referenced in a method are loaded before the method is executed.
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
|
|
|
|
|
I once had a very similar problem. I was using something like this.
Thread worker = null;
try
{
new Thread(new ThreadStart(threadFunc));
}
catch (Exception)
{
}
.
.
.
void threadFunc()
{
try
{
}
catch (Exception)
{
}
}
The damn thing kept crashing on me in spite of the try/catch. I finally found out, that an assembly was missing that was referenced in threadFunc. So the Framework tried to load the assembly when inspecting the function, and that was already in the new thread (so the try in the main thread didn't work) but outside of my code.
The solution was to use an intermediate function (with a try/catch inside) similar to the way you are doing it with your ConsoleCrap class. So the lesson learned was: Don't put anything that can crash on load in a function that is directly called by the framework.
The good thing about pessimism is, that you are always either right or pleasently surprised.
|
|
|
|
|
Hi,
I need to improve performance of wpf application. Application is taking too much time to load (almost 15 sec).
As per current behavior application is loading a lot of data from service (kinda lookup Data). Different function are implemented for getting various data from service and already System.Threading.Tasks.Parallel is used to invoke to load data.
Can you please help where I should look to improve performance of application during loading.
PFB the implemented code on client side
SplashWindow.OpenSplash();
System.Threading.Tasks.Parallel.Invoke(
() =>
{
//Load the user preferneces
SplashWindow.SetProgress("Load Lookup Tables...");
LookupTableBL.Instance.Load();
},
() =>
{
LookupTableBL.Instance.LoadHighPriority();
}
);
System.Threading.Tasks.Parallel.Invoke(
() =>
{
//Load the user preferneces
SplashWindow.SetProgress("Load User Preferences...");
UserPreferences.Instance.Load();
},
() =>
{
//start log user entry
SplashWindow.SetProgress("Log User Entry...");
UserEntries.Instance.StartUserEntry();
}
);
SplashWindow.SetProgress("Initialize Component...");
InitializeComponent();
|
|
|
|
|
Yeah, 15 secs to open an app is WAY too long. Windows itself can boot up faster then that. No offense, but I'd just uninstall an app that took 15 seconds to open and use a different one. That being said, you didn't show what any of those .Load() methods are doing or what the .StartUserEntry() method is doing. So I can't really give you any advice beyond one or more of those methods are slow. You need to find out which one and why its slow before you can fix it. Taking a few timings with DateTime.TotalMilliseconds will point you in the right direction.
modified 12-Nov-14 13:16pm.
|
|
|
|
|
load is actually loading a lot of data from hosted service(most of them are dictionaries) e.g.
public void Load(
<pre lang="vb">System.Threading.Tasks.Parallel.Invoke(
() => this.KanbanNoteStateIndicators = LookupTableInnerBL.Instance.GetKanbanNoteStateIndicators()
, () => this.Disciplines = LookupTableInnerBL.Instance.GetDisciplines()
, () => this.MilestoneTypes = LookupTableInnerBL.Instance.GetMilestoneTypes()
, () => this.EpicRequirementTypes = LookupTableInnerBL.Instance.GetEpicRequirementTypes()..... total of 25 to load data which is later used in the applicaiton
}</pre>
Same way we have load resources where are loading resources parallelly from service
private void GetResourcesFromServer()
{
this.Resources = LookupTableInnerBL.Instance.GetResources();
this.ResourcesDictionary = Resources.AsParallel().ToDictionary((item) => item.ID);
}
StartUserEntry is function where current user Identity is logged into database.
|
|
|
|
|
Well, then there you go, that's why your app is slow to start up.
* how many MB of data are you loading combined?
* unless I misread your explanation, you are also making 20 to 30 or more calls into the web service? That's going to be slow.
You need to reconsider your design.
Do you really need to suck down the entire database at start up? Probably not. Yes, it is easier to code it that way, but it will be a performance hit. Especially for customers with slower connections to your web service.
Without understanding your UI or what this data is, its hard to say.
Is your app an internal business app? If so, using a web service as a middle man is overkill and silly. A better design is to use something like EntityFramework which will automatically grab only the data thats needed. If you need to service external customers, then you'll need a web service, of course.
How is your Web Service configured? REST? XML? Soap? If your client is the only client accessing the service, then using a text based web service is silly and lots of additional overhead to all the data. Switch to NetTCPBinding.
Just tossing some ideas out there based on what you posted... but generally, it looks like you are sucking down the entire database (and adding a lot of overhead to it) at start up when thats really not a good idea.
|
|
|
|
|
|
Data is not that big as it is only a kind of look up data (like our standards for the app that never changes). Rest we have whole db from which we are getting data at run time. I checked time of all these calls. There are few methods(2-3) which takes 1-1.5, rest are either 0.001 sec - .4 sec.
Our app is internal business app having around 2000 users and we are already using NetTcp Binding
|
|
|
|