|
public Control GetPC(iCRComm cbInstance, string dllSelected, TemplateHandlerApp.Templates.TEMPL[] template, string dll, Site.Site.SITE cert0, int slaveIndex, int boxID, Form theParent)
{
cr = factory.GetCR(type, slaveIndex);
cr.ProgressChanged += new ProgressChangeHandler2(updateProgressBar);
}
What type is "cr"? And what does the factory return? Btw, your naming isn't very helpful here. Any way we could translate what you're trying to achieve to a simple console-app? Makes it easier to focus on the problem itself, without having to worry about the rest of the app.
Why does the CR5_new class have a Main method? It's not the entry-point for your app, is it?
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
|
|
|
|
|
Thanks for the input, Eddy. I guess it's a good idea to try and put it in a simple console app. It might be crucial that I'm jumping through separate vs projects etc, so I left it as-is. I'm not sure why CR5 has a main. It's mostly just a dll and not a form, unlike a lot of my other classes.
cr is an iCR type. It looks like this in the factory:
public iCR GetCR(CRType type, int slaveIndex)
{
iCR cr = null;
switch (type)
{
case CRType.CR5:
cr = new CR5_new.CR5(slaveIndex);
break;
case CRType.CR6:
cr = new CR6.CR6(slaveIndex);
break;
default:
throw new ArgumentException(string.Format("A CR of type {0} cannot be found", Enum.GetName(typeof(CRType), type)));
}
return cr;
}
|
|
|
|
|
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplicationXXIV
{
enum CRType { CR5, CR6 }
public delegate void ProgressChangeHandler2(int progress, int id);
public interface iCR
{
event ProgressChangeHandler2 ProgressChanged;
}
public class CR5 : iCR
{
public int SlaveIndex { get; set; }
public event ProgressChangeHandler2 ProgressChanged;
public CR5(int slaveIndex)
{
SlaveIndex = slaveIndex;
}
public int ProcessTagWrite()
{
AttemptWrites();
return 0;
}
private void AttemptWrites()
{
for (int i = 0; i < (10); i++)
{
RaiseProgressChange(i, SlaveIndex);
}
}
private void RaiseProgressChange(int progress, int id)
{
if (ProgressChanged != null)
{
ProgressChanged(progress, id);
}
}
}
class GenericPC
{
public object GetPC()
{
var cr = Program.GetCR(CRType.CR5, 0);
cr.ProgressChanged += new ProgressChangeHandler2(updateProgressBar);
(cr as CR5).ProcessTagWrite();
return cr;
}
private void updateProgressBar(int n, int id)
{
Console.WriteLine(String.Format("Progress: {0}\tid:{1}", n, id));
}
}
class Program
{
static void Main(string[] args)
{
var npc = new GenericPC();
npc.GetPC();
Console.ReadKey();
}
public static iCR GetCR(CRType type, int slaveIndex)
{
iCR cr = null;
switch (type)
{
case CRType.CR5:
cr = new CR5(slaveIndex);
break;
case CRType.CR6:
cr = null;
break;
default:
throw new ArgumentException(string.Format("A CR of type {0} cannot be found", Enum.GetName(typeof(CRType), type)));
}
return cr;
}
}
} First things first; place the cursor on the word ProgressChangeHandler2 and press F2 (or Ctrl-R, Ctrl-R) and rename that to something without a number
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
|
|
|
|
|
Good start. The Cr5_Comm class is missing from that. Good idea for ProgressChangeHandler to lose the 2. If you don't have the iCR_Comm interface, it's like I never made my changes at all.
|
|
|
|
|
To use the other interface, the CR5 class would need to inherit from it and implement it.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplicationXXIV
{
enum CRType { CR5, CR6 }
public delegate void ProgressChangeHandler2(int progress, int id);
public interface iCRComm
{
event ProgressChangeHandler2 ProgressChanged;
int ReadTag(ref byte[] dataDumpWriteCheck);
}
public class CR5 : iCRComm
{
public int SlaveIndex { get; set; }
public event ProgressChangeHandler2 ProgressChanged;
public CR5(int slaveIndex)
{
SlaveIndex = slaveIndex;
}
public int ReadTag(ref byte[] dataDumpWriteCheck)
{
Console.WriteLine(String.Format("Data: {0}", dataDumpWriteCheck));
return 0;
}
private void RaiseProgressChange(int progress, int id)
{
if (ProgressChanged != null)
{
ProgressChanged(progress, id);
}
}
}
class GenericPC
{
public iCRComm GetPC()
{
var cr = Program.GetCR(CRType.CR5, 0);
cr.ProgressChanged += new ProgressChangeHandler2(updateProgressBar);
byte[] b = null;
cr.ReadTag(ref b);
return cr;
}
private void updateProgressBar(int n, int id)
{
Console.WriteLine(String.Format("Progress: {0}\tid:{1}", n, id));
}
}
class Program
{
static void Main(string[] args)
{
var npc = new GenericPC();
npc.GetPC();
Console.ReadKey();
}
public static iCRComm GetCR(CRType type, int slaveIndex)
{
iCRComm cr = null;
switch (type)
{
case CRType.CR5:
cr = new CR5(slaveIndex);
break;
case CRType.CR6:
cr = null;
break;
default:
throw new ArgumentException(string.Format("A CR of type {0} cannot be found", Enum.GetName(typeof(CRType), type)));
}
return cr;
}
}
}
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
|
|
|
|
|
Can CR5 inherit from both iCR and iCRComm?
|
|
|
|
|
Your definition and use of iCRComm is what my iCR interface is. It's still not doing what my iCRComm does. Thanks for helping!!
|
|
|
|
|
Yes; although I don't see why one wouldn't simply modify the original interface to include the new method. Remember that the factory is there for a good reason.
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
|
|
|
|
|
Yes, but I have two factories. One for CR5 interface and one for CRComm interface. It may not be obvious from what I posted, but they have very different uses. Generic needs to use CR5 for writes. CR5Comm is used all over the place and definitely isn't the same/can't be condensed into one with CR5. You're changing the use of everything too much for it to be helpful. Maybe we need to go back to the original VS project definitions of everything? I know it's difficult, but it's like that for a reason. Even where you put the delegate doesn't translate to anywhere in my code.
|
|
|
|
|
MichCl wrote: It may not be obvious from what I posted, but they have very different uses.
I'd expect anything out that factory to behave similar; otherwise you'd be checking whether you're working on a CR5 or a CR6 everywhere in code, making things even more complicated.
MichCl wrote: Even where you put the delegate doesn't translate to anywhere in my code.
As far as the compiler is concerned, it's located in "some" namespace. As long as it's referenced, it can be used.
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
|
|
|
|
|
Like I said. There are two different factories. One for comm, one for crx. I get two different things from them. The fact that I don't have a check for CR5 or CR6, is because my cr factory returns an instance of iCR that is an instance of either cr5 or cr6. When I make a call from my instance of icr that is returned, it will automatically go to the implementation of cr5 or cr6, whichever I instantiated in the factory.
I realize the compiler doesn't care about the delegate location and usage, but I do. The structure/fix that you are suggesting doesn't translate even slightly to my code, which is in separate vs projects. I can't put my delegate where you have it, so it's not a fix for my problem. Thanks for the help!
|
|
|
|
|
MichCl wrote: The structure/fix that you are suggesting doesn't translate even slightly to my code, which is in separate vs projects.
Aight, can you add in the project names in the original post? Make 'em fake ones if required
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
|
|
|
|
|
Thanks! I updated the original post with vs project names.
|
|
|
|
|
Did you see the changes I made to the original post?
|
|
|
|
|
I did, but I won't be able to work on it until I am home
|
|
|
|
|
Guess what???! I cleaned all of my classes, detached and re-attached references, and it's working now. I guess I had the delegates/events and the interfaces set up correctly after all!!!! I was stepping through and noticed an exception was being thrown so I wasn't getting to my event setup (+/-), so that's why it was null and missing updating the progressBar. Thanks for the help!!
|
|
|
|
|
MichCl wrote: Guess what???! I cleaned all of my classes, detached and re-attached references, and it's working now. Cool!
MichCl wrote: Thanks for the help!! You're welcome
|
|
|
|
|
It seems like the place you're putting the delegate won't work for me since you have it all in one program and I don't. I see that it works, though.
|
|
|
|
|
How to view the images from folder one by one by clicking next and previous button in c#
|
|
|
|
|
Exactly how you do it depends on teh environment, which you don't specify. For a web based solution it would be different from a WinForms version.
Winforms is easy (but even then there are a number of ways to do it):
Read the list of image files (using Directory.GetAllFiles)
Set a class level index to 0.
Show the first image, by loading it (using Image.FromFile) into the Image property of a PictureBox.
When the next button is pressed, increment the index, and show that one. Similar for the previous button.
The universe is composed of electrons, neutrons, protons and......morons. (ThePhantomUpvoter)
|
|
|
|
|
im using windows application
|
|
|
|
|
DirectoryInfo di = new DirectoryInfo(@"C:\YourImgDir");
FileInfo[] Images = di.GetFiles("*.jpg");
or try this
var path = Server.MapPath("...");
var images = Directory.GetFiles(path, "*.png");
foreach (var image in images)
{
System.Console.WriteLine(image);
}
modified 3-May-13 9:28am.
|
|
|
|
|
code is simple:
System.Diagnostics.Process.Start("sc", "\\\\" + strMachine + " config \"<the service name>\" start= demand");
not getting any exception or anything. My code is impersonating a domain user that has admin rights on that box. I know the impersonation code is working because I use it elsewhere.
Also, if I do a runas command prompt and run the command line manually, it successfully works, so I know the username and password are correct. Just can't do it from C#.
I can't see if its spitting out any errors as the dos box flashes too fast.
Any ideas?
|
|
|
|
|
Don't build the command line argument string inside the Start method. Build it into a variable so you can see EXACTLY what is being sent to the Start method.
|
|
|
|
|
Yeah, I've done that and its EXACTLY what I ran under the runas command. I've tried both the code I posted (while impersonating the domain account that has admin rights) as well as the version of Start where you pass in the username, password & domain. In addition, as proof that my impersonation code is working, I'm able to start & stop the service remotely with the service control manager class. I'm also able to execute pskill remotely (to kill a process).
|
|
|
|