|
there is a program of a document manager that pushes the document to a Queue
There are 3 questions on 3 different threads, base on the same program
this is the 2nd question
the program is :-
using System;
using System.Threading;
using System.Threading.Tasks;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Text;
namespace scratchpad3
{
class Program
{
public static void Main()
{
var dm = new DocumentManager<Document>();
dm.AddDocument(new Document("Title A", "Sample A"));
dm.AddDocument(new Document("Title B", "Sample B"));
dm.DisplayAllDocuments();
if (dm.IsDocumentAvailable)
{
Document d = dm.GetDocument();
Console.WriteLine(d.Content);
Console.Read();
}
}
}
public class DocumentManager<T>
where T : IDocument
{
private readonly Queue<T> documentQueue = new Queue<T>();
public void AddDocument(T doc)
{
lock (this)
{
documentQueue.Enqueue(doc);
}
}
public bool IsDocumentAvailable
{
get { return documentQueue.Count > 0; }
}
public T GetDocument()
{
T doc = default(T);
lock (this)
{
doc = documentQueue.Dequeue();
}
return doc;
}
public void DisplayAllDocuments()
{
foreach (T doc in documentQueue)
{
Console.WriteLine(doc.Title);
}
}
}
public interface IDocument
{
string Title { get; set; }
string Content { get; set; }
}
public class Document : IDocument
{
public Document()
{
}
public Document(string title, string content)
{
this.Title = title;
this.Content = content;
}
public string Title { get; set; }
public string Content { get; set; }
}
}
Please refer to line indicated as "//************************1
"
& also Please refer to line indicated as "//************************2"
Q2) Here if we note this :
public class DocumentManager<T>
where T : IDocument {// code}
var dm = new DocumentManager<Document>();
when T is constrained for type IDocument , how could we manage:
<Document
>
|
|
|
|
|
there is a program of a document manager that pushes the document to a Queue
There are 3 questions on 3 different threads, base on the same program
the program is :-
using System;
using System.Threading;
using System.Threading.Tasks;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Text;
namespace scratchpad3
{
class Program
{
public static void Main()
{
var dm = new DocumentManager<Document>();
dm.AddDocument(new Document("Title A", "Sample A"));
dm.AddDocument(new Document("Title B", "Sample B"));
dm.DisplayAllDocuments();
if (dm.IsDocumentAvailable)
{
Document d = dm.GetDocument();
Console.WriteLine(d.Content);
Console.Read();
}
}
}
public class DocumentManager<T>
where T : IDocument
{
private readonly Queue<T> documentQueue = new Queue<T>();
public void AddDocument(T doc)
{
lock (this)
{
documentQueue.Enqueue(doc);
}
}
public bool IsDocumentAvailable
{
get { return documentQueue.Count > 0; }
}
public T GetDocument()
{
T doc = default(T);
lock (this)
{
doc = documentQueue.Dequeue();
}
return doc;
}
public void DisplayAllDocuments()
{
foreach (T doc in documentQueue)
{
Console.WriteLine(doc.Title);
}
}
}
public interface IDocument
{
string Title { get; set; }
string Content { get; set; }
}
public class Document : IDocument
{
public Document()
{
}
public Document(string title, string content)
{
this.Title = title;
this.Content = content;
}
public string Title { get; set; }
public string Content { get; set; }
}
}
Please refer to line indicated as "//************************1"
Q1) How would these 2 declarations and its corrosponding objects differ :
i )
IDocument ido = new IDocument();
and
ii)
public class DocumentManager<T> where T : IDocument {// code}
var dm = new DocumentManager<IDocument>(); // pls note this IS A DEVIATION form // the code
|
|
|
|
|
Well, i) doesn't work because IDocument is an interface - which can't be instantiated because there's no implementation of it. It's just a contract.
|
|
|
|
|
In my windown application, I have a listview, which contains two columns. One of the subitem in a row contains the data as below.
"Failed testcase path=C:\temp\test.jpg"
I need to provide hyperlink to only "C:\temp\test.jpg". If I click on the same, it should open the corresponding image.
I tried by changing the property HotTaracking to true.
listView1.HotTracking = true;
But it shows hyperlinks to all the rows in listview.
Is there a way to achieve this?
|
|
|
|
|
I wrote a simple keylooger and i test it on win7 and all things is work successfuly but it dont work on xp system and show this message
"unable to find a version of runtime to run this application " how can i solve this proplem????
c#
|
|
|
|
|
It means that you are using a version of the dotNet Framework that is not installed on the XP machine. Ensure that the correct version is installed and your application should run.
I wasn't, now I am, then I won't be anymore.
|
|
|
|
|
I hope for your own good, that you're writing that keylogger purely out of academic curiosity. Deploying such a piece of software on a machine unbeknownst to its user is like opening Pandora's box or a can of worms if you like. Depending on what jurisdiction you live in the legal implications might be quite severe. So if you plan on using this covertly you'd better be prepared and have your ass covered by a legal department.
Regards,
— Manfred
"I had the right to remain silent, but I didn't have the ability!"
Ron White, Comedian
|
|
|
|
|
I want to save a collection of custom objects. It seems that I succeed but when I try to retrieve the setting after the program restarts, the data is gone. I have searched extensively for the solution but to no avail. Here is what I have. Any help would be deeply appreciated.
In my settings.cs file I have added the following code.
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
public List<Account> Accounts
{
get
{
return ((List<Account>)(this["Accounts"]));
}
set
{
this["Accounts"] = value;
}
}
Then I have the class marked as serializable. I have the following code at window close and as you can see it does compile so it picks up on the code and the data is there after I save it using the debugger to verify.
Properties.Settings.Default.Accounts = accounts.List;
Properties.Settings.Default.Save();
All should be ok when I run the following code except the data just isn't there as it has a value of null.
if (Properties.Settings.Default.Accounts != null)
{
accounts.List = Properties.Settings.Default.Accounts;
}
|
|
|
|
|
Did you check the XML file to make sure its getting written out?
|
|
|
|
|
Where does it put the xml file and if it's not writing to the xml file where should I look to find out why?
|
|
|
|
|
On Windows 7 it'll put it in C:\Users\<username>\AppData\<CompanyName>\<long gibberish directory name that begins with your EXE name>\<version>\user.config
Your code looks like it should work, just make sure you call Properties.Settings.Default.Save(); and write the value to Properties.Settings.Default.PropName.
How are you specifying versions? If you are doing the auto increment version thing (or you change your version number between runs), there is an additional step you need to do to migrate the settings. You will need to call UpgradeSettings(). However, that is only needed when the version number changes. If you are using auto increment version numbers, your version will change everytime you compile, so you'd need to call UpgradeSettings() all the time.
If you are just leaving it at 1.0.0.0 or whatever for now, UpgradeSettings() is not the issue, just keep in mind you'll need to use it in the real, final implementation.
|
|
|
|
|
At the moment I don't have versions so upgrade isn't the issue. As you can see by the code, it is being saved and as I noted before, the class is there because I can see it right there in the debugger. I assume that because I can see it in the debugger that there is no serialization issue but maybe I am wrong. The class itself is not too complex. It is 4 strings and 2 decimal variables so I think it can be serialized. I checked where you said and there is no xml file so that is definitely the issue. I just don't know why there is no xml file.
|
|
|
|
|
What does your AssemblyInfo.cs look like? Are you getting any exceptions? Are you running the app as admin or some kind of restricted user? What does your app.config look like?
EDIT: I looked back at your original post and it seems like you hand edited the settings.cs file? So the issue might be that your app.config is out of sync (doesn't contain the necessary entries).
|
|
|
|
|
I did not edit the app.config file at all. What do I need to put in the app.config file?
|
|
|
|
|
Yeah, that's what drives the whole thing . Did you create the Settings.settings file? You should create your settings through the Visual Studio settings editor and that'll populate the app.config for you.
|
|
|
|
|
I would have done that from the beginning but my type is not supported there.
|
|
|
|
|
You can do custom types there, but its a little tricky . Once you get your code all compiling, in the type you select Browse and in the edit box, you type in the fully qualified name of your type.
Hmm... I just tried this in VS2012 and I guess they don't write to the app.config for custom types anymore. They did in 2010.
Did you check your AssemblyInfo.cs file? If you don't have a company name specified, it won't work. That I did just verify.
In addition, what does your Account class look like?
Do you have public PROPERTIES and not public variables? Do you have a public parameterless constructor?
I didn't need the constructor in my test app that i just tried... just trying to trouble shoot all the gotchas .
|
|
|
|
|
I didn't have a company but I added it and it didn't help. I will just put the code for the class and the nested class. Also as I noted before I never touched the app.config file so if I do need to make changes to that then I would need to know how to do that.
Here is the Accounts class
[Serializable]
public class Accounts
{
public Accounts()
{
List = new List<Account>();
}
public List<Account> List { get; set; }
public decimal TotalBalance()
{
decimal balance = 0;
foreach (Account a in List)
{
balance += a.Balance;
}
return balance;
}
public decimal TotalEquity()
{
decimal equity = 0;
foreach (Account a in List)
{
equity += a.Equity;
}
return equity;
}
}
And here is the Account class
[Serializable]
public class Account
{
public Account(string path)
{
Path = path;
Initialize();
}
private bool Initialize()
{
using (FileStream fs = new FileStream(Path, FileMode.Open, FileAccess.Read))
{
using (StreamReader reader = new StreamReader(fs))
{
while (!reader.EndOfStream)
{
var line = reader.ReadLine();
var values = line.Split(',');
Broker = values[0];
Name = values[1];
AccountNumber = values[2];
Balance = decimal.Parse(values[3]);
Equity = decimal.Parse(values[4]);
break;
}
}
}
return true;
}
public bool Update()
{
using (FileStream fs = new FileStream(Path, FileMode.Open, FileAccess.Read))
{
using (StreamReader reader = new StreamReader(fs))
{
while (!reader.EndOfStream)
{
var line = reader.ReadLine();
var values = line.Split(',');
Balance = decimal.Parse(values[3]);
Equity = decimal.Parse(values[4]);
break;
}
}
}
return true;
}
private string Path;
public string Broker { get; set; }
public string Name { get; set; }
public string AccountNumber { get; set; }
public decimal Balance { get; set; }
public decimal Equity { get; set; }
}
|
|
|
|
|
A class will not xml serialize unless it has a public parameterless constructor. For successful deserialization it must be possible to completely set the object's state by assigning values to it's public properties.
In effect the deserializer is doing something like this:
Account acc = new Account();
acc.Broker = savedBroker;
acc.Name = savedName;
.... etc.
Without the necessary public parameterless constructor the serialization will silently fail (really helpful Microsoft!). You can add the constructor but then it looks like an Account cannot be restored fully as the object is strongly coupled to a specific file via the Update method and the Path has not been serialized. Think about the design carefully before adding a public Path property as the information stored in the file and in the serialized settings may be different.
Alan.
|
|
|
|
|
Is this only for certain kinds of serialization because I just in the past few minutes successfully manually persisted the objects using the following code. It works perfectly except that it uses a file that the user can screw with which I wanted to avoid. I.E. They could move the program without the file.
for loading
if (File.Exists(settingsFileName))
{
Stream TestFileStream = File.OpenRead(settingsFileName);
BinaryFormatter deserializer = new BinaryFormatter();
accounts = (Accounts)deserializer.Deserialize(TestFileStream);
TestFileStream.Close();
foreach (Account a in accounts.List)
{
ListViewItem item = new ListViewItem(new string[] { a.Broker, a.Name, a.AccountNumber, a.Balance.ToString(), a.Equity.ToString() });
listView1.Items.Add(item);
}
}
for saving
Stream TestFileStream = File.Create(settingsFileName);
BinaryFormatter serializer = new BinaryFormatter();
serializer.Serialize(TestFileStream, accounts);
TestFileStream.Close();
|
|
|
|
|
Yes, binary serialisation works differently and does not have the constructor/public property constraints of xml. There is information on MSDN but it's quite heavy going and the implications of what they're saying may not become apparent until you've made a few mistakes of your own.
Serialization[^]
Good luck, Alan.
|
|
|
|
|
ok so after getting frustrated I decided to run a test. My thinking was that maybe it can't save it. It would seem this is correct but I don't know why. I tried to save a string using the same method and it worked without editing the app.config file. So then I would try just to save one instance of the nested class Account and it did not work either so who knows.
|
|
|
|
|
hi to all
i have a very complex problem in crystal report can every one help me for this problem?
thanks for any idea
my problem:
i have a report when my store procedure return 30 row ,this rows
show in two page ,row 28 will be disappeared and remove from the report.
i re size my report header and footer ,but my problem is already exist
|
|
|
|
|
Post it in a different forum with report sections screen shot to get the answer. People will look for C# questions here.
modified 11-Apr-13 6:00am.
|
|
|
|
|