从 "not responding" C# 寻找预防措施
Looking for preventive from "not responding" C#
昨天我的老师给我一个任务,在 .txt 文件中制作类似数据库的东西,它必须包含十六进制和一个 C# 应用程序,它从这个数据库中获取所有十六进制,还有它的偏移量。然后我必须使用它,偏移量,从这个偏移量的文件中获取十六进制并比较两个十六进制,它们是否相同。
我正在使用 fileSystemWatcher
到 "spy" 为新文件选择的目录,并且有一个、两个、三个或更多的文件它工作完美但是如果我尝试复制非常 "big" 文件夹应用程序停止- "not responding"。
我试图找出问题出在哪里,比如我添加和删除函数并找到 "black sheep" - 函数必须采用文件的十六进制,它符合给定的偏移量。
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 线程,因为您 运行 您的方法在单独的线程上。
祝你好运。
昨天我的老师给我一个任务,在 .txt 文件中制作类似数据库的东西,它必须包含十六进制和一个 C# 应用程序,它从这个数据库中获取所有十六进制,还有它的偏移量。然后我必须使用它,偏移量,从这个偏移量的文件中获取十六进制并比较两个十六进制,它们是否相同。
我正在使用 fileSystemWatcher
到 "spy" 为新文件选择的目录,并且有一个、两个、三个或更多的文件它工作完美但是如果我尝试复制非常 "big" 文件夹应用程序停止- "not responding"。
我试图找出问题出在哪里,比如我添加和删除函数并找到 "black sheep" - 函数必须采用文件的十六进制,它符合给定的偏移量。
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 线程,因为您 运行 您的方法在单独的线程上。
祝你好运。