从“不回应”中寻找预防措施c#
本文关键字:寻找 预防措施 不回应 回应 | 更新日期: 2023-09-27 18:12:23
昨天我的老师给了我一个任务,让我在。txt文件中创建一个数据库,它必须包含十六进制和一个c#应用程序,它从这个数据库中获取所有的十六进制,也有它的偏移量。然后我要使用它,偏移量,从这个偏移量的文件十六进制,并比较这两个haxes,他们是相同的。我使用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线程,因为你在一个单独的线程上运行你的方法。
古德勒克。