|
I won't try to talk anyone out of learning C#. It's a great language and, in my opinion, fun to use.
With that said, however, I would question the appropriateness of it as it pertains to the goals you mentioned. If a GUI is a requirement for the apps you want to build, you can disregard most of this post. Programming C#[^] by Jesse Liberty is a very good book, although it assumes some programming experience.
If you don't need a GUI (ie, you'll run your apps from the command line) and are basically looking for a way to automate some of your job functions, you may be better off learning a scripting language. You can choose from VBScript, JavaScript, Perl and several others to code in. The types of things you mentioned would likely only require a few lines of code to implement.
If you decide scripting is what's right for your needs, Microsoft Windows 2000 Scripting Guide[^] would be a good start. It goes over scripting concepts, individual languages (VBScript, JavaScript, and WSH), as well as some scripting interfaces useful to system administrators (WMI, ADSI).
You can probably get what you want done either way, so it's just a matter of how you want to go abou it. For non-GUI, sys-admin type stuff, I'd choose scripting every time.
Charlie
if(!curlies){ return; }
|
|
|
|
|
VS.NET can generate stubs for members of an interface (by pressing TAB when you have completed typing the interface name against the class definition in the C# Code Editor). I have noticed that it sometimes generates explicit and sometimes implicit interface members. For example, using ICustomTypeDescriptor generates a mixture of implicit and explicit members.
I would like to be able to control how it generates stubs for my own interfaces. Does anyone know whether this can be done ?
Thanks.
Robert.
|
|
|
|
|
I read "Many times many articles",
But still I am struggling to know the exact difference.
Apart from this if I say Object=nothing. What is the impact on Garbage Collector, I want what exactly the garbage collector will take care of this.
|
|
|
|
|
The short answer is that when you set Object=nothing (or Object=null in C#) nothing happens until the garbage collector runs. When the garbage collector runs is non-determinisitic which means that it can't really be predicted.
For more details the following from MSDN should help.
MSDN wrote:
During a collection, the garbage collector will not free an object if it finds one or more references to the object in managed code. However, the garbage collector does not recognize references to an object from unmanaged code, and might free objects that are being used exclusively in unmanaged code unless explicitly prevented from doing so. The KeepAlive method provides a mechanism that prevents the garbage collector from collecting objects that are still in use in unmanaged code.
Other than managed memory allocations, implementations of the garbage collector do not maintain information about resources held by an object, such as file handles or database connections. When a type uses unmanaged resources that must be released before instances of the type are reclaimed, the type can implement a finalizer.
In most cases, finalizers are implemented by overriding the Object.Finalize method; however, types written in C# or C++ implement destructors, which compilers turn into an override of Object.Finalize. In most cases, if an object has a finalizer, the garbage collector calls it prior to freeing the object. However, the garbage collector is not required to call finalizers in all situations. Also, the garbage collector is not required to use a specific thread to finalize objects, or guarantee the order in which finalizers are called for objects that reference each other but are otherwise available for garbage collection.
In scenarios where resources must be released at a specific time, classes can implement the IDisposable interface, which contains the IDisposable.Dispose method that performs resource management and cleanup tasks. Classes that implement Dispose must specify, as part of their class contract, if and when class consumers call the method to clean up the object. The garbage collector does not, by default, call the Dispose method; however, implementations of the Dispose method can call methods in the GC class to customize the finalization behavior of the garbage collector.
--Colin Mackay--
EuroCPian Spring 2004 Get Together[^]
"You can have everything in life you want if you will just help enough other people get what they want." --Zig Ziglar
|
|
|
|
|
Hi all,
I have done one application in C#, when I load this program in my system as a service( auto) one more application is not running. Once I stop this C# service immediately that program is responding. This is occuring only at the boot of the system. Once this killing of service is done, the problem is not reoccuring. Anybody got some clue why its happening?? I checked the dependencies of this service, there are no dependencies. Still why its happening??
Regards,
Satya Prasad
|
|
|
|
|
I don't completely understand your question, but if you mean that you're trying to run a Windows Forms application from another Windows Service, the service must be marked to interact with the desktop. You can find this property in the Properties sheet for the service in your Services snap-in in the Administrative Tools inside the Control Panel. This is only applicable if your service runs as a local system account. Otherwise, if you run it as a particular user, that user must have a desktop associated with it (it should be created if it doesn't already exist) and must have the "Log on Locally" and "Login as a Service" privileges, which you can configure in the Local Security snap-in.
If this isn't what you're asking about, please elaborate.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Hi dudes.
I was wondering how to create .dll's in VS.NET? Just curious about it, would be great if someone knew
Thanks!
- Up The Irons, Morten Kristensen
|
|
|
|
|
If you mean you want to export some mothods and propertes you should use CLASS LIBRARY project.
Mazy
"Improvisation is the touchstone of wit." - Molière
|
|
|
|
|
thanks.
Serdar YILMAZ
Senior Developer
|
|
|
|
|
Hey...
Like this:
this.WindowState = System.Windows.Forms.FormWindowState.Minimized;
- Up The Irons, Morten Kristensen
|
|
|
|
|
this.WindowState = FormWindowState.Minimized;
Mazy
"Improvisation is the touchstone of wit." - Molière
|
|
|
|
|
I have a function with a problem as describe in it:
public void Func(Control control)
{
...
...
} I need to know at runtime, whether the control object is actually derived from Form or Button. Any ideas?
<font=arial>Weiye Chen
When pursuing your dreams, don't forget to enjoy your life...
|
|
|
|
|
public void Func(Control c)
{
if (c.GetType().ToString() == "System.Windows.Forms.Form")
{
}
else if (c.GetType().ToString() == "System.Windows.Forms.Button")
{
}
}
|
|
|
|
|
Or you could make it look nicer by
public void Func(Control c)
{
if(c is System.Windows.Forms.Form){
{
}elseif(c is System.Windows.Forms.Button)
{
}
}
|
|
|
|
|
Yes, i do like "nice" looking solution...
<font=arial>Weiye Chen
When pursuing your dreams, don't forget to enjoy your life...
|
|
|
|
|
Thanks!
<font=arial>Weiye Chen
When pursuing your dreams, don't forget to enjoy your life...
|
|
|
|
|
Here's my scenario:
I want to create a report with a header, details and footer where each of these sections come from a separate typed dataset.
So, for an invoice I want to do the following:
header - client info
details - line items for order
footer - totals for order
I can't go directly to the database with Crystal, so I thought using typed datasets would be OK.
I can create a header report and a line item report with separate typed datasets, but can't come right with one report composing of three typed datasets.
To create one report I'm using:
CrystalReport1 report1 = new CrystalReport1();
report1.SetDataSource(lines); //lines = a typed dataset
crystalReportViewer1.ReportSource = report1;
For the composite report, I've tried:
dsCompo.Tables.Add( lines.Copy());
dsCompo.Tables.Add( companytx.Copy());
CrystalReport4 report4 = new CrystalReport4();
report4.SetDataSource(ds);
crystalReportViewer1.ReportSource=report4;
But the viewer jsut asks for a database login...
I have tried using a subreport, but get the same result.
Is there something obvious I'm missing?
Cheers,
Simon
sig :: "Don't try to be like Jackie. There is only one Jackie.... Study computers instead.", Jackie Chan on career choices.
article :: animation mechanics in SVG blog:: brokenkeyboards
|
|
|
|
|
Same question as above, just after 2 cups of coffee:
Here's my scenario:
I have report A populated with a typed dataset and it works.
I have report B populated with a different typed dataset and it works.
Now I want to combine these 2 into another report.
Using the Crystal.NET designer, I make a new report and add the above 2 subreports.
Given the following code:
CrystalReport4 report4 = new CrystalReport4();
report4.SetDataSource(/* ??? */);
crystalReportViewer1.ReportSource=report4;
What do I set the datasource of my composite report to?
I really need to pass both populated typed datasets in, but the interface is a little unhelpful...
Cheers,
Simon
sig :: "Don't try to be like Jackie. There is only one Jackie.... Study computers instead.", Jackie Chan on career choices.
article :: animation mechanics in SVG blog:: brokenkeyboards
|
|
|
|
|
I'm not sure if you can use multiple DataSet s, but you could merge one typed DataSet with the other and use that. In order to design the report, you might consider creating a typed DataSet that has the merged structure. If you don't want to keep the generated classes for it in your project, you could probably toss it after you're finished designing your report since the merged DataSet would have the same structure.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
|
Change the Opacity property of your form in a timer or something like that.
Mazy
"Improvisation is the touchstone of wit." - Molière
|
|
|
|
|
it doesn't work!
the interval property of timer is 100!
this is my code,is there anything wrong?
private void button1_Click(object sender, System.EventArgs e)
{
this.Opacity = 0;
timer1.Start();
}
private void timer1_Tick(object sender, System.EventArgs e)
{
this.Opacity = this.Opacity + 5;
if(this.Opacity >= 100)
{
timer1.Stop();
}
}
Tuliplanet
|
|
|
|
|
Hey.. You have to set the timers interval, when it has to run the method.
Timer newTimer = new Timer();<br />
newTimer.Interval = 1000;
newTimer.Tick += new EventHandler(TheMethod);<br />
<br />
<br />
newTimer.Start();
- Up The Irons, Morten Kristensen
|
|
|
|
|
|
By the way this will solve it:
Tuliplanet wrote:
this.Opacity = this.Opacity + 5;
Change it to
this.Opacity = this.Opacity + 0.05;
You should use numbers between 0 to 1.
Mazy
"Improvisation is the touchstone of wit." - Molière
|
|
|
|