|
Charles Petzold's book on C# is full of information on this topic.
Nick Parker
|
|
|
|
|
Hi All,
I have a text file which will hold some details for my application.
I am now trying to read these details to display them in my application.
I know how to open a file and setup a StreamReader , but how can I make my reader only read from a certain position or even better search for a certain keyword and then read from there?
Thanks,
Gavin
|
|
|
|
|
If its a text file you should probably use a TextReader instead of a StreamReader. You can use the Seek method of the reader to move or position; but if you are looking for a specific thing you will probably have to read through the file until you find what you are looking for.
James
Simplicity Rules!
|
|
|
|
|
I tried using the TextReader but it didn't have the seek option and I couldn't find anything else which was helpful.
I need to pick up 3 different things from this file, but I can't figure out how to read through the file and select a certain thing?
Or is there a better way to do this other than using a static file.
I just need to store some small strings.
Thanks
|
|
|
|
|
Here's some code:
static void Main(string[] args)
{
const int iReadTotal=10;
const int iReadStart=10;
FileStream f = new FileStream ("C:\\test.vbs",System.IO.FileMode.Open, System.IO.FileAccess.Read);
f.Seek(iReadStart,System.IO.SeekOrigin.Current);
StreamReader st = new StreamReader(f);
char[] buffer=new char[iReadTotal];
st.ReadBlock(buffer,0,buffer.Length);
string s="";
for(int i=0;i<buffer.Length;i++)
s+=buffer[i].ToString();
Console.WriteLine(s);
Console.Read();
}
HTH
Cheers,
Simon
"I get paid for my brain and my thinking in several obscure worlds", Olli, The Lounge
|
|
|
|
|
I want to use database in connected mode with DataReader.After I use ExecuteReader() I waana fill DataGrid with it but I can't add row to DataGrid dynamicly or show the table in DataGrid in Connected mode.
OleDbCommand command = new OleDbCommand ( "select * from Tennis", this.myoleDbConnection );
myoleDbConnection.Open ();
OleDbDataReader reader = command.ExecuteReader ( );
while ( reader.Read () )
{
}
reader.Close ();
myoleDbConnection.Close ();
Mazy
"The path you tread is narrow and the drop is shear and very high,
The ravens all are watching from a vantage point near by,
Apprehension creeping like a choo-train uo your spine,
Will the tightrope reach the end;will the final cuplet rhyme?"Cymbaline-Pink Floyd
|
|
|
|
|
I don't think you can fill the datagrid directly, you have to use a datatable at the very least.
James
Simplicity Rules!
|
|
|
|
|
Yes,thats the thing I find out today,So I think when I want use DataReader it is not good idea to use DataGrid and ListView is better option for it.Beacaue for DataGrid I have to use DataSet or DataTable so I have to do one extra operation.Whats your opinion about it?
Thanks
Mazy
"The path you tread is narrow and the drop is shear and very high,
The ravens all are watching from a vantage point near by,
Apprehension creeping like a choo-train uo your spine,
Will the tightrope reach the end;will the final cuplet rhyme?"Cymbaline-Pink Floyd
|
|
|
|
|
[my 2 cents]
Using a listview is a far better option.
Short of prototyping, I don't see a place for large scale databinding in applications.
Cheers,
Simon
"I get paid for my brain and my thinking in several obscure worlds", Olli, The Lounge
|
|
|
|
|
[my 2 cents too]
I understand this using the old databinding control (see VB 6 controls), but with the new ADO.NET model I think things have changed, the combination of Connection, DataAdapter, DataSet and DataGrid should work a lot better.
Anyway, I haven't done any testing yet.
Andres Manggini.
Buenos Aires - Argentina.
|
|
|
|
|
Correct, the VB6 controls sucked because they always kept a connect to the database open, so you could count on there being x number of connections at any one time.
With the .NET model you open a connection, get the data, then close the connection; everything is operated on in a disconnected state. Once you're done editing you can ignore the changes or open another connection and make the changes.
James
Simplicity Rules!
|
|
|
|
|
You need to use a datactrl, then assign the datagrid to datacontrol and in your code asign the dataset to datactrl
Best Regards
Carlos Antollini.
Sonork ID 100.10529 cantollini
|
|
|
|
|
DataSet work in disconnected mode,I wanna use connected mode.
Mazy
"The path you tread is narrow and the drop is shear and very high,
The ravens all are watching from a vantage point near by,
Apprehension creeping like a choo-train uo your spine,
Will the tightrope reach the end;will the final cuplet rhyme?"Cymbaline-Pink Floyd
|
|
|
|
|
Is there any way to speed up the startup time of a winforms application? The thing takes nearly a minute to startup! This is on a pretty low end machine (P133) but it runs fine once it's going.
|
|
|
|
|
You can run the install time JITter on it.
ngen [assembly name] In this case Assembly Name would be the executable.
James
Sonork: Hasaki
"I left there in the morning
with their God tucked underneath my arm
their half-assed smiles and the book of rules.
So I asked this God a question
and by way of firm reply,
He said - I'm not the kind you have to wind up on Sundays."
"Wind Up" from Aqualung, Jethro Tull 1971
|
|
|
|
|
That didn't seem to make much difference. oh well.
|
|
|
|
|
Are you running the command on the machine you are testing it on? You could also run ngen on any non-system assembly that you use.
James
Sonork: Hasaki
"I left there in the morning
with their God tucked underneath my arm
their half-assed smiles and the book of rules.
So I asked this God a question
and by way of firm reply,
He said - I'm not the kind you have to wind up on Sundays."
"Wind Up" from Aqualung, Jethro Tull 1971
|
|
|
|
|
Yes, I ran it on the machine its running on. It seemd to make no difference at all in startup time.
James T. Johnson wrote:
You could also run ngen on any non-system assembly that you use.
I dont quite understand this?
The program is a database app... when started nothing happens for a while then the UI starts to draw then nothing happens again for a while, then finally the rest of the UI draws and away we go. Maybe the connection to the database is whats slow? (although its just a local MDB database).
|
|
|
|
|
paulb wrote:
Maybe the connection to the database is whats slow? (although its just a local MDB database).
Beings that your db is local, I can only assume the time delay could be related to the processor speed(P133 and .NET application?).
Nick Parker
|
|
|
|
|
Is ur machine on a domain based network, if thats the case there is a bug in the framework (which can be worked around) which increases the app startup time. It has something to do with the 'aspnet' user account which needs to be configured on the deployed machines under the 'guest' users. I happen to see this on the .net mailing list.
If this isnt (the machine not on a domain) the case, I think you will have to accept the fate.
Cheers
Kannan
|
|
|
|
|
I tried running the ngen utility on couple of programs I have written, there doesnt seem to be any significant improvement in performance.
Is it something to do with any of the command line switches or to do with it will only work for certain type of apps.
Have you tried using ngen and seen any performance improvement.
Also, I believe that ngen simply reduces the process of the IL being compiled during the time of invokation(ie if u use ngen on a assembly the process of compilation to machine code after loading the assembly is skipped). Is this the right understanding.
Thanks
Kannan
|
|
|
|
|
Yes, thats the correct understanding...
Here's why
Currently there are two JITters with .NET, the runtime JIT and the install-time JIT. The runtime JIT is what you get by default; it works a method at a time. The install-time JIT takes an entire assembly and performs the MSIL -> x86 conversion on it.
The performance improvement you see depends on how your program is structured, if you do a lot of processing on startup (and probably a lot of method calls) then running the install-time JIT will help out because you won't incur the JIT for every method call.
If you don't do a lot of startup processing then there is a good chance you won't see any effect right away if at all.
But (!) there is no guarantee that the framework won't re-JIT your assembly even if you've run ngen on it. If it thinks there is a reason to believe the underlying IL has changed it will reJIT the assembly, but I cannot remember if it reJITs all of it or if it reverts back to runtime JITting.
James
Simplicity Rules!
|
|
|
|
|
Thanks James for the Info'.
I never knew anything on reJITing ... but I couldnt follow when you said the underlying IL has changed.. u mean how the m/c code is aligned or something of that sort ..Any idea on how do I do the install time JIT stuff, I remember long ago I read an article which said the JITing happens not once or all at a time but only when a particular portion of the code is used eg. a method call is done.
thanks
Kannan
|
|
|
|
|
Kannan Kalyanaraman wrote:
but I couldnt follow when you said the underlying IL has changed..
In a .NET application it is possible to change the image of the assembly at runtime. John Lam does this in his aspect weaver, and the JITter does this whenever it JITs a method [before a method is JITted the x86 has a jmp to a stub function that does the JIT, that jmp is then replaced once the method has been JITted].
Kannan Kalyanaraman wrote:
Any idea on how do I do the install time JIT stuff
ngen is the install-time JIT utility, so you'd just run that program during your setup.
Kannan Kalyanaraman wrote:
I remember long ago I read an article which said the JITing happens not once or all at a time but only when a particular portion of the code is used eg. a method call is done.
The runtime JIT works this way. When a method is JITted any method calls are looked up to see if the method has already been JITted, if it has it outputs an x86 jmp instruction to that method's x86 code; if it hasn't been JITted it instead outputs a jmp instruction to a stub function, which when executed will start the JIT process.
James
Simplicity Rules!
|
|
|
|
|
I'm currently trying to get a remote object, using Remoting... I can get the object, but I can't grab a event the object fires. This is all example code and I just can't seem to get it work. I get the object, but the remote object doesn't see the client sign up to watch for the event, so it never fires the event. Or if you have a better way for my Server and Client to communicate, don't hesitate to share.
Any help with would greatly appreciated. If you have more questions, please email me.
[Server]
using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
namespace Test.Remote
{
/// <summary>
/// Summary description for Class1.
/// </summary>
class Server
{
static void Main(string[] args)
{
TcpServerChannel channel = new TcpServerChannel(8086);
ChannelServices.RegisterChannel(channel);
RemotingConfiguration.RegisterWellKnownServiceType(typeof(RemoteObject), "Hi", WellKnownObjectMode.SingleCall);
Console.WriteLine("Hit to exit");
Console.ReadLine();
}
}
}
[Client]
using System;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
namespace Test.Remote
{
/// <summary>
/// Summary description for Class1.
/// </summary>
class Client
{
[STAThread]
static void Main(string[] args)
{
//RemotingConfiguration.Configure("Client.exe.config");
ChannelServices.RegisterChannel(new TcpClientChannel());
RemoteObject obj = (RemoteObject)Activator.GetObject(typeof(RemoteObject), "tcp://localhost:8086/Hi");
EventSink sink = new EventSink();
// register client sink in server - subscribe to event
obj.Status += new StatusEvent(sink.StatusHandler);
obj.LongWorking(5000);
// unsubscribe to event
obj.Status -= new StatusEvent(sink.StatusHandler);
obj.LongWorking(5000);
Console.WriteLine("Hit to exit");
Console.ReadLine();
}
}
}
[RemoteObject]
using System;
namespace Test.Remote
{
[Serializable]
public class StatusEventArgs
{
public StatusEventArgs(string m)
{
message = m;
}
public string Message
{
get
{
return message;
}
set
{
message = value;
}
}
private string message;
}
public delegate void StatusEvent(object sender, StatusEventArgs e);
/// <summary>
/// Summary description for Class1.
/// </summary>
public class RemoteObject : MarshalByRefObject
{
public RemoteObject()
{
Console.WriteLine("RemoteObject constructor called");
}
public event StatusEvent Status;
public void LongWorking(int ms)
{
Console.WriteLine("RemoteObject: LongWorking() Started");
StatusEventArgs e = new StatusEventArgs(
"Message for Client: LongWorking() Started");
// fire event
if (Status != null)
{
Console.WriteLine("RemoteObject: Firing Starting Event");
Status(this, e);
}
System.Threading.Thread.Sleep(ms);
e.Message = "Message for Client: LongWorking() Ending";
// fire ending event
if (Status != null)
{
Console.WriteLine("RemoteObject: Firing Ending Event");
Status(this, e);
}
Console.WriteLine("RemoteObject: LongWorking() Ending");
}
}
}
[EventSink]
using System;
using System.Runtime.Remoting.Messaging;
namespace Test.Remote
{
/// <summary>
/// Summary description for Class1.
/// </summary>
public class EventSink : MarshalByRefObject
{
public EventSink()
{
Console.WriteLine("EventSink: Constructor called");
}
[OneWay]
public void StatusHandler(object sender, StatusEventArgs e)
{
Console.WriteLine("EventSink: Event occurred: " + e.Message);
}
}
}
-wzrd
wizardque@yahoo.com
|
|
|
|