1.使用方法:
string str = "abc";
AutoGenerateChar _generate = new AutoGenerateChar(str);
_generate.OnGenerateOne += (item) =>
{
Console.WriteLine(item);
};
_generate.Start();
2.类定义:
/// <summary>
/// 自动生成排列字符封装
/// </summary>
public class AutoGenerateChar
{
private string _Source = null;
private string _Number = "1234567890";//数字字符
private string _Special = "!@#$%^&*()_+|,./;'[]\\{}|:\"<>?";//常用特殊字符
private string _Lower = "abcdefjhijklmnopqrstuvqxyz";//小写英文
private string _Upper = "ABCDEFJHIJKLMNOPQRSTUVWXYZ";//大写英文
private Thread _MainThread = null;
/// <summary>
/// 排列组合一个成功后
/// </summary>
public Action<string> OnGenerateOne = null;
/// <summary>
/// 执行接触时触发
/// </summary>
public Action OnEnd = null;
public AutoGenerateChar()
{
_Source += _Number;
_Source += _Special;
_Source += _Lower;
_Source += _Upper;
_MainThread =new Thread(Generate);
}
/// <summary>
/// 指定字符串源
/// </summary>
/// <param name="source"></param>
public AutoGenerateChar(string source)
{
_Source = source;
_MainThread = new Thread(Generate);
}
/// <summary>
/// 开始
/// </summary>
public void Start()
{
_MainThread.Start();
}
/// <summary>
/// 终止
/// </summary>
public void Stop()
{
_MainThread.Abort();
}
private void Generate()
{
//抽取字符
Extract extract = new Extract();
extract.OnCreateOneGroup += (e) =>
{
//对象前字符串进行排列
Assemble assemble = new Assemble(e);
assemble.OnCreateOneGroup += (item) =>
{
//获取一组成功
if (OnGenerateOne != null)
{
OnGenerateOne(item);
}
};
assemble.DoRank();
};
for (int i = 0; i < _Source.Length; i++)
{
extract.DoExtract(_Source, i + 1);
}
//执行结束后触发
if (OnEnd != null)
OnEnd();
}
}