写个WINFORM程序,界面上只需要一个按钮和一个文本显示区,每次点击按钮,生成一个流水号,流水号是根据config中ReChargeSeqNumber参数,当程序人为或非法关闭后,下次打开能接着上次的流水号继续生成。
ConfigurationManager.AppSettings["ReChargeSeqNumber"]从本config文件中读取参数
其中会涉及到将参数写入config,这个写入config的方法需要你自己完成
注意:ConfigurationManager.AppSettings读取配置会被缓存,用SetAppValue修改后,下次读取值不会变
可以考虑写到文件里面不一定是config,个人认为config里面的文件还是固定不能被代码修改为好,那样的话只要序列化到文件就可以了,读的时候可以反序列化就可以。
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
public void SerializeNow()
{
ClassToSerialize c = new ClassToSerialize();
FileStream fileStream = new FileStream("c:\\temp.dat", FileMode.Create);
BinaryFormatter b = new BinaryFormatter();
b.Serialize(fileStream, c);
fileStream.Close();
}
public void DeSerializeNow()
{
ClassToSerialize c = new ClassToSerialize();
c.Sex = "kkkk";
FileStream fileStream = new FileStream("c:\\temp.dat", FileMode.Open, FileAccess.Read, FileShare.Read);
BinaryFormatter b = new BinaryFormatter();
c = b.Deserialize(fileStream) as ClassToSerialize;
Response.Write(c.name);
Response.Write(c.Sex);
fileStream.Close();
}
不管怎样必须按照要求来做。不过还是要谢谢你。这个方法我会好好看看的。谢谢
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
this.textBox1.Text = SeriaNoManager.GetInstance().GenerateSerialNo();
}
}
public class SeriaNoManager
{
private static SeriaNoManager __seriaNoManager;
private static object objLock = new object();
private SeriaNoManager() { }
public static SeriaNoManager GetInstance()
{
lock (objLock)
{
return __seriaNoManager == null ? new SeriaNoManager() : __seriaNoManager;
}
}
public string GenerateSerialNo()
{
int serialNo = -1;
using (TransactionScope tranScope = new TransactionScope())
{
try
{
serialNo = int.Parse(ConfigurationManager.AppSettings
["ReChargeSeqNumber"]);
ConfigurationManager.AppSettings["ReChargeSeqNumber"] = (++serialNo).ToString();
}
catch
{
if (Transaction.Current != null)Transaction.Current.Rollback();
throw;
}
}
return serialNo.ToString();
}
}
这个方法是一个网友提供的,不过在关闭后重新打开后无法 接着上次的流水号,继续运行,运行时 是重新计算流水号的。( 而我所需要的是可以接着关闭之前的流水号继续下去。)不知道这个该怎样修改?
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="ReChargeSeqNumber" value="1"/>
</appSettings>
</configuration> 这个是配置文件中的代码。
@Shang0109:
所以我说不要把这个东西放在appSettings这里,序列化到一个XML里面,每次计算的时候都序列化保存.
这是要你自己写还是别人帮着写?每点按钮把最后的流水号写入配置文件不行么?这也不费性能,不太知道你卡在哪了,个人感觉不什么问题。就是:运行程序===》读配置到一个数据结构(比如DataTable)====》当SetAppValue时把DataTable里的值写回硬盘的配置文件中。
怎么写?求解释。求代码 (在关闭重新打开之后,触发按钮会在textbox中显示上次最后运行时流水号之后的那个流水号)