|
There are free tools as well, they are just not as good. Your only other alternative is to learn C#, no-one is going to write the code for you.
Christian Graus - Microsoft MVP - C++
"I am working on a project that will convert a FORTRAN code to corresponding C++ code.I am not aware of FORTRAN syntax" ( spotted in the C++/CLI forum )
|
|
|
|
|
Dont worry, i never wish forum will give me a complete code, just reference like read me and etc. thank you for you concern!
|
|
|
|
|
I have a small test program using MS Word.
I only want to control the user open and close some MS Word document.
In my program,when the user want to open a document,I create a new Word.Application and a new Document ,then open the document. There is no problem when the program runs.
But when the user close the document or the MS Word,problems occur.I want to prompt the user if he or she would like to overwrite the exsit file.I hope someone would like to give me a solution.Because,I use SaveFileDialog,some exception would puzzle me.
Thanks.
GOOD LUCK
|
|
|
|
|
What is the exception? Post the portion of code that is causing the problem.
"More functions should disregard input values and just return 12. It would make life easier." - comment posted on WTF
"I haven't spoken to my wife now for 48 hours. I don't like to interrupt her.
|
|
|
|
|
There,when my finish my task(open a new document and save it),the Word would tell me it come up some problems so that should be close and restart!
Really,I only want to open a document and save it as other file.i.e.If some changes occur,it would prompt the user to save or not.That is,I want to control some usual beheavor of Word.
Thanks.
GOOD LUCK
|
|
|
|
|
Hi,
I have a project that needs to do many, many DNS lookups. I have done a bit of reseach and come up with the following code:
for (int x = 0; x < hostList.Count; x++)
{
figure out how to get the delegated method to update a datatable or an array in the main thread.
getIP.BeginInvoke(hostList[x], new AsyncCallback(MyCallback), getIP);
}
The call back is:
void MyCallback(IAsyncResult ar)
{
getDNS getIP = (getDNS)ar.AsyncState;
string result = getIP.EndInvoke(ar);
MessageBox.Show(result); <-- just so I know it works - testing purpose.
}
I now have the problem that I can't reference the original object/string passed to 'ar' so that I can match it up with the result and then update the datatable (or array or whatever).
I originally considered backgroundworkers to do the job but I think that is overkill. Surely I can achieve what I want with the IAsyncResult.
If anyone care to comment or make suggestions so I can get past this brick wall it would be much appreciated.
Thanks.
Glen Harvy
|
|
|
|
|
Is this in a Form application? If so...
delegate void Result(string s);
delegate void ExceptionHandler(Exception ex);
private void MyCallback(IAsyncResult ar)
{
getDNS getIP = (getDNS)ar.AsyncState;
try
{
string result = getIP.EndInvoke(ar);
BeginInvoke(new Result(MyResultMethod), result);
}
catch(Exception ex)
{
BeginInvoke(new ExceptionHandler(MyExceptionHandler), ex);
}
}
private void MyResultMethod(string s)
{
MessageBox.Show(s);
}
private void MyExceptionHandlerMethod(Exception ex)
{
MessageBox.Show(ex.Message);
}
The above should work. Generally, you don't want to catch Exception s, but rather one or more of the derived exception classes. It may be ok in this situation. Not sure.
|
|
|
|
|
Krikey - thanks.
I've been up a long time now and will need to digest this but it looks like what I need to know.
Thank you very much.
Glen Harvy
|
|
|
|
|
Please be careful with this and don't rely on using this method too much as uses ThreadPool threads of which there are only 25 assigned. It may be the case that .Net will adjust this as necessary but, you may want to revise your design to using a dedicated thread if the number of concurrent events becomes large. You'll notice this if your program slows, but you have no explanation for the slowness.
Oh and another note, *invoke methods, along with the UI, generally use thread pool threads to accomplish their tasks.
Finally, when you read the documentation on thread pool threads, please note that a busy system will sometimes drop the tasks assigned to thread pool threads just because the system is too busy.
Phil
|
|
|
|
|
Thanks for this pointer.
I was going to implement a limit of 20 calls to IAsyncResult at any one time as I had read somewhere else about the issue you raise. I have since read the msdn note on the thread pool.
I'm beginning to wonder whether I should create separate backgroundworkers for this task but someone else has said that these backgroundworkers also use the thread pool.
I'm now not sure of which way to go. I'm tempted to creat separate threads and be done with it.
I would expect that on average there will be something like 200 to 500 dns lookups to be performed. Often less but sometimes double this.
What would you suggest.
BTW: The UI will be blocked during these lookups with a simple progress bar shown for the user to watch if they are totally bored .
Glen Harvy
|
|
|
|
|
How long will the operation take that the thread pool thread will be doing? If it is a long process, then by all means create your own pool of threads to handle this. Otherwise using the thread pool threads will work just fine. DNS lookups should be short enough for you to be able to use the thread pool threads.
Another note about thread pool threads: If an exception occurs within the thread, it is not reported to the application and therefore you should always do exception handling in the thread pool thread if for no other reason than to indicate when something has gone wrong.
Phil
|
|
|
|
|
Thanks again Phil.
I suppose my question was really "how longs a piece of string" but your experience was what I was looking for and thanks for sharing.
I was aware of the exception problem and already have ways of dealing with this
Glen Harvy
|
|
|
|
|
|
Leslie Sanford wrote:
private void MyResultMethod(string s)
{
MessageBox.Show(s);
}
Ok, I've been able to digest most of this but still have my original problem.
How can I "do other updating .." unless I know which hostname that this ip belongs to. I can't figure out how to match this thread with any of the other threads I've created at:-
for (int x = 0; x < hostList.Count; x++)
{
getIP.BeginInvoke(hostList[x], new AsyncCallback(MyCallback), getIP);
}
-- modified at 6:07 Wednesday 15th August, 2007
I've just noticed that doing what you suggest doesn't actually run more than one call in the calling foreach loop at a time which is not what I wanted. The main thread needs to create at least 20 lookups running in async mode at any one time. Does that make more sense?
Glen Harvy
|
|
|
|
|
Glen Harvy wrote: Ok, I've been able to digest most of this but still have my original problem.
How can I "do other updating .." unless I know which hostname that this ip belongs to. I can't figure out how to match this thread with any of the other threads I've created at:-
Does the getIP object have this information? If so, you can pass this information along to the UI from your callback:
delegate void Result(string hostName, string result);
delegate void ExceptionHandler(Exception ex);
private void MyCallback(IAsyncResult ar)
{
getDNS getIP = (getDNS)ar.AsyncState;
try
{
string result = getIP.EndInvoke(ar);
BeginInvoke(new Result(MyResultMethod), getDNS.HostName, result);
}
catch(Exception ex)
{
BeginInvoke(new ExceptionHandler(MyExceptionHandler), ex);
}
}
private void MyResultMethod(string hostName, string result)
{
MessageBox.Show(hostName);
}
private void MyExceptionHandlerMethod(Exception ex)
{
MessageBox.Show(ex.Message);
}
Glen Harvy wrote: I've just noticed that doing what you suggest doesn't actually run more than one call in the calling foreach loop at a time which is not what I wanted. The main thread needs to create at least 20 lookups running in async mode at any one time. Does that make more sense?
I'm not sure I follow. All I've shown is the callback method. This is independent of how many times it runs.
|
|
|
|
|
Thanks for your input - it has helped me glean a lot from using the async features.
I decided to go with using the following as it suits my purposes well (I think):
IAsyncResult[] results = new IAsyncResult[hostList.Count];
if (results.Length > 19)
{
}
for (int x = 0; x < hostList.Count; x++)
{
results[x] = getIP.BeginInvoke(hostList[x], null, null);
}
for (int i = 0; i < results.Length; i++)
{
if (results[i].AsyncWaitHandle.WaitOne(20000, true))
{
string r = getIP.EndInvoke(results[i]).ToString();
string[] n = r.Split(new char[1] { '|' });
DataRow nr = this.myWebLoggerDataSet.Tables["dnscache"].NewRow();
nr["IP"] = n[1].ToString();
nr["Name"] = n[0].ToString();
nr["Date"] = DateTime.Now;
this.myWebLoggerDataSet.Tables["dnscache"].Rows.Add(nr);
}
}
this.dnscacheTableAdapter.Update(this.myWebLoggerDataSet.dnscache);
myWebLoggerDataSet.AcceptChanges();
I think I'll be OK now but of course any comments will most definitely be appreciated.
Glen Harvy
|
|
|
|
|
Does anybody know if there's a way to interact with a printer that prints onto CD's? I've googled it and haven't found anything promising. The app that I'm writing is going to need it. It seem that only the manufacture of the printer can interface with it. Any ideas?
|
|
|
|
|
If a printer that prints to CDs does anything special, it's propetary, and you'll need to talk to the manufacturers of that printer, to work out how to interact with it
Christian Graus - Microsoft MVP - C++
"I am working on a project that will convert a FORTRAN code to corresponding C++ code.I am not aware of FORTRAN syntax" ( spotted in the C++/CLI forum )
|
|
|
|
|
I'm having a hard time installing the sourceGrid into my workstation. I download the source code and I don't know where to put it to get it to work with my Project. Can someone show me steps by steps on how to installed it and how I can use it on my project.
For starter I just want to use the Basic grid and show a 3x5 grid.
|
|
|
|
|
Just compile the project to get the binaries and then add a reference to the assembly produced in your project. You won't have to include the sources then.
|
|
|
|
|
What grid ? Is it an article ? The article has a forum for questions.
Christian Graus - Microsoft MVP - C++
"I am working on a project that will convert a FORTRAN code to corresponding C++ code.I am not aware of FORTRAN syntax" ( spotted in the C++/CLI forum )
|
|
|
|
|
When I add the dll files as a reference I get the following error message
A Reference to "D:\path\to\project\sourcegrid\bin\sourceGrid.dll" could not be added. This is not a valid assembly or COM component. Only assemblies with extension 'dll' and COM components can be referenced. Please make sure that the file is accessible, and that is a valid assembly or COM component.
Any idea why I'm getting this error?
|
|
|
|
|
Could anyone tell me why this doesn't work:
string st = "ä";
st.Replace("ä", "ae");
Console.WriteLine(st); //output: ä
What is going on?
|
|
|
|
|
string.Replace() is a method with a string return value. Try this
st = st.Replace("a", "ae");
- Arcond
|
|
|
|
|
Thanks! I would never have figured it out alone.
|
|
|
|