寻找预防措施;“没有回应”;C#
昨天,我的老师给了我一个任务,让我在.txt文件中创建一个类似数据库的东西,它必须包含hexes和一个C#应用程序,该应用程序从这个数据库中获取所有hexes,以及它的偏移量。然后我要用它,偏移量,从这个偏移量的文件中取十六进制,比较两个hax,它们是否相同。 我正在使用寻找预防措施;“没有回应”;C#,c#,hex,filesystemwatcher,C#,Hex,Filesystemwatcher,昨天,我的老师给了我一个任务,让我在.txt文件中创建一个类似数据库的东西,它必须包含hexes和一个C#应用程序,该应用程序从这个数据库中获取所有hexes,以及它的偏移量。然后我要用它,偏移量,从这个偏移量的文件中取十六进制,比较两个hax,它们是否相同。 我正在使用fileSystemWatcher来“监视”所选目录中的新文件,如果有一个、两个、三个或更多的文件,它会工作得很好,但是如果我试图复制非常“大”的文件夹,应用程序就会停止——“没有响应”。 我试图找出问题的根源,比如我添加和删除
fileSystemWatcher
来“监视”所选目录中的新文件,如果有一个、两个、三个或更多的文件,它会工作得很好,但是如果我试图复制非常“大”的文件夹,应用程序就会停止——“没有响应”。
我试图找出问题的根源,比如我添加和删除函数,并找到了“害群之马”——该函数必须接受文件的十六进制值,该值符合给定偏移量
public string filesHex(string path,int bytesToRead,string offsetLong)
{
byte[] byVal;
try
{
using (Stream fileStream = new FileStream(path, FileMode.Open, FileAccess.Read))
{
BinaryReader brFile = new BinaryReader(fileStream);
offsetLong = offsetLong.Replace("x", string.Empty);
long result = 0;
long.TryParse(offsetLong, System.Globalization.NumberStyles.HexNumber, null, out result);
fileStream.Position = result;
byte[] offsetByte = brFile.ReadBytes(0);
string offsetString = HexStr(offsetByte);
//long offset = System.Convert.ToInt64(offsetString, 16);
byVal = brFile.ReadBytes(bytesToRead);
}
string hex = HexStr(byVal).Substring(2);
return hex;
}
您可以创建一个新线程并在其中运行
filesHex
方法
您可以在线程代码中更改字符串,然后按如下方式获取其值:
public string hex="";
public void filesHex(string path,int bytesToRead,string offsetLong)
{
byte[] byVal;
using (Stream fileStream = new FileStream(path, FileMode.Open, FileAccess.Read))
{
BinaryReader brFile = new BinaryReader(fileStream);
offsetLong = offsetLong.Replace("x", string.Empty);
long result = 0;
long.TryParse(offsetLong, System.Globalization.NumberStyles.HexNumber, null, out result);
fileStream.Position = result;
byte[] offsetByte = brFile.ReadBytes(0);
string offsetString = HexStr(offsetByte);
//long offset = System.Convert.ToInt64(offsetString, 16);
byVal = brFile.ReadBytes(bytesToRead);
}
hex = HexStr(byVal).Substring(2);
}
这将是您的电话:
Thread thread = new Thread(() => filesHex("a",5,"A"));//example for parameters.
thread.Start();
string hexfinal=hex;//here you can acess the desired string.
现在它不会冻结主UI线程,因为您在sperate线程上运行您的方法
祝你好运。你的老师教过你多线程吗?没有,但我对多线程有一点了解。可能需要进一步的重构-
filesHex
获取参数并返回一个值,该值将与此代码一起丢弃。好的,但要在线程中使用它,它必须不包含任何参数arguments@KenTavur哦请看我的最新答案。编辑好了,让我试试,我会feedback@KenTavur好的,带着结果回来。祝你好运。