110,544
社区成员
发帖
与我相关
我的任务
分享
Thread t;
private void buttonImportResource_Click(object sender, EventArgs e)
{
OpenFileDialog op = new OpenFileDialog();
op.Filter = "文件文件(*.txt)|*.txt";
if (op.ShowDialog() == DialogResult.OK)
{
this.textBoxResource.Text = op.FileName;
dt.Rows.Clear();
t = new Thread(new ParameterizedThreadStart(ReadFile));
t.IsBackground = true;
t.Start(this.textBoxResource.Text);
//ReadFile(this.textBoxResource.Text);
//如果不用线程 把上面3行注释掉 直接用这个方法 并且用
//Application.DoEvents();虽然不会出现假死 但是很慢
//50万要用7分钟。。。
}
}
//响应UI
private void LabelContent(string txt)
{
if (this.labelPercent.InvokeRequired)
this.labelPercent.BeginInvoke(new LabelInvoke(LabelContent), new object[] { txt });
else
this.labelPercent.Text = txt;
}
private void ReadFile(object path)
{
string pps = path as string;
StreamReader sr = new StreamReader(pps, Encoding.GetEncoding("gb2312"));
int line = 0;
while (sr.Peek() > -1)
{
line++;
DataRow dr = dt.NewRow();
dr["序号"] = line.ToString();
dr["资源数据"] = sr.ReadLine();
LabelContent("正在读取第" + line.ToString() + "行");
dt.Rows.Add(dr);
//Application.DoEvents();
}
sr.Close();
resTotal = line;
}
[DllImport("kernel32.dll")]
public static extern IntPtr CreateFileMapping(IntPtr hFile,
IntPtr lpFileMappingAttributes, uint flProtect,
uint dwMaximumSizeHigh,
uint dwMaximumSizeLow, string lpName);
[DllImport("kernel32.dll")]
public static extern IntPtr MapViewOfFile(IntPtr hFileMappingObject, uint
dwDesiredAccess, uint dwFileOffsetHigh, uint dwFileOffsetLow,
IntPtr dwNumberOfBytesToMap);
[DllImport("kernel32.dll")]
public static extern bool UnmapViewOfFile(IntPtr lpBaseAddress);
[DllImport("kernel32.dll")]
public static extern bool CloseHandle(IntPtr hObject);
[DllImport("kernel32.dll")]
public static extern IntPtr CreateFile(string lpFileName,
int dwDesiredAccess, FileShare dwShareMode, IntPtr securityAttrs,
FileMode dwCreationDisposition, int dwFlagsAndAttributes, IntPtr hTemplateFile);
[DllImport("kernel32.dll")]
public static extern uint GetFileSize(IntPtr hFile, IntPtr lpFileSizeHigh);
private string returnback(string path)
{
string str = "";
IntPtr vFileHandle = CreateFile(path,
GENERIC_READ | GENERIC_WRITE, FileShare.Read | FileShare.Write,
IntPtr.Zero, FileMode.Open,
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, IntPtr.Zero);
if (INVALID_HANDLE_VALUE != (int)vFileHandle)
{
IntPtr vMappingHandle = CreateFileMapping(
vFileHandle, IntPtr.Zero, PAGE_READWRITE, 0, 0, "~MappingTemp");
if (vMappingHandle != IntPtr.Zero)
{
IntPtr vHead = MapViewOfFile(vMappingHandle,
FILE_MAP_COPY | FILE_MAP_READ | FILE_MAP_WRITE, 0, 0, IntPtr.Zero);
if (vHead != IntPtr.Zero)
{
uint vSize = GetFileSize(vFileHandle, IntPtr.Zero);
byte[] temp = new byte[vSize];
for (int i = 0; i < vSize; i++)
{
byte vTemp = Marshal.ReadByte((IntPtr)((int)vHead + i));
temp[i] = vTemp;
}
ASCIIEncoding encoding = new ASCIIEncoding();
str = encoding.GetString(temp).Replace("\r\n", ",");
UnmapViewOfFile(vHead);
}
CloseHandle(vMappingHandle);
CloseHandle(vHead);
}
CloseHandle(vFileHandle);
}
return str;
}