110,571
社区成员
发帖
与我相关
我的任务
分享
using System;
using System.Threading;
namespace Test
{
class Program
{
private static void Foo(Object obj)
{
if(obj != null)
{
ThreadData threadData = obj as ThreadData;
if (threadData != null)
{
Console.WriteLine(String.Format("ThreadName={0},RunTime={1}", threadData.ThreadName, threadData.RunTime));
}
}
}
static void Main()
{
ThreadData threadData = new ThreadData();
threadData.ThreadName = "TestThread";
threadData.RunTime = System.DateTime.Now;
Thread t = new Thread(new ParameterizedThreadStart(Foo));
t.IsBackground = true;
t.Start(threadData);
Console.ReadKey();
}
}
class ThreadData
{
public String ThreadName;
public DateTime RunTime;
}
}
类代码:
using System;
using System.IO;
using System.Runtime.InteropServices;
using System.Threading;
namespace WindowsFormsApplication1
{
/// <summary>
/// 继续滥用委托
/// </summary>
/// <param name="sourceFile"></param>
/// <param name="targetFile"></param>
public delegate void CopyProgressHandler(String sourceFile, String targetFile);
/// <summary>
/// 拷贝文件夹类
/// </summary>
public class CopyDirectory
{
/// <summary>
/// 继续滥用事件
/// </summary>
public event CopyProgressHandler CopyProgress;
#region Win32 API
private const int MAX_PATH = 260;
private const int MAX_ALTERNATE = 14;
[StructLayout(LayoutKind.Sequential)]
private struct FILETIME
{
public uint dwLowDateTime;
public uint dwHighDateTime;
};
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
private struct WIN32_FIND_DATA
{
public FileAttributes dwFileAttributes;
public FILETIME ftCreationTime;
public FILETIME ftLastAccessTime;
public FILETIME ftLastWriteTime;
public uint nFileSizeHigh; //changed all to uint from int, otherwise you run into unexpected overflow
public uint nFileSizeLow; //| http://www.pinvoke.net/default.aspx/Structures/WIN32_FIND_DATA.html
public uint dwReserved0; //|
public uint dwReserved1; //v
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = MAX_PATH)]
public string cFileName;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = MAX_ALTERNATE)]
public string cAlternate;
}
[DllImport("kernel32", CharSet = CharSet.Unicode)]
private static extern IntPtr FindFirstFile(string lpFileName, out WIN32_FIND_DATA lpFindFileData);
[DllImport("kernel32", CharSet = CharSet.Unicode)]
private static extern bool FindNextFile(IntPtr hFindFile, out WIN32_FIND_DATA lpFindFileData);
[DllImport("kernel32.dll", SetLastError = true)]
private static extern bool FindClose(IntPtr hFindFile);
#endregion
/// <summary>
/// 拷贝
/// </summary>
/// <param name="sourceDirectory">源文件</param>
/// <param name="targetDirectory">目标文件夹</param>
public void Copy(String sourceDirectory, String targetDirectory)
{
IntPtr INVALID_HANDLE_VALUE = new IntPtr(-1);
WIN32_FIND_DATA findData;
IntPtr findHandle;
findHandle = FindFirstFile(sourceDirectory + "*.*", out findData);
if (findHandle != INVALID_HANDLE_VALUE)
{
do
{
if ((findData.dwFileAttributes & FileAttributes.Directory) != 0)
{
if (findData.cFileName != "." && findData.cFileName != "..")
{
Copy(String.Format("{0}{1}{2}", sourceDirectory, findData.cFileName, "\\"), targetDirectory);
}
}
else
{
String strFile = sourceDirectory + findData.cFileName;
if (File.Exists(strFile))
{
try
{
FileInfo fileInfo = new FileInfo(strFile);
String strCopyTargetFile = String.Format("{0}{1}", targetDirectory, fileInfo.Name);
if (CopyProgress != null)
{
// 触发事件,通知界面
CopyProgress(strFile, strCopyTargetFile);
}
// 拷贝文件
File.Copy(strFile, strCopyTargetFile);
}
catch
{
}
}
}
}
while (FindNextFile(findHandle, out findData));
FindClose(findHandle);
}
}
}
}
窗体代码:
using System;
using System.IO;
using System.Runtime.InteropServices;
using System.Threading;
namespace WindowsFormsApplication1
{
/// <summary>
/// 继续滥用委托
/// </summary>
/// <param name="sourceFile"></param>
/// <param name="targetFile"></param>
public delegate void CopyProgressHandler(String sourceFile, String targetFile);
/// <summary>
/// 拷贝文件夹类
/// </summary>
public class CopyDirectory
{
/// <summary>
/// 继续滥用事件
/// </summary>
public event CopyProgressHandler CopyProgress;
#region Win32 API
private const int MAX_PATH = 260;
private const int MAX_ALTERNATE = 14;
[StructLayout(LayoutKind.Sequential)]
private struct FILETIME
{
public uint dwLowDateTime;
public uint dwHighDateTime;
};
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
private struct WIN32_FIND_DATA
{
public FileAttributes dwFileAttributes;
public FILETIME ftCreationTime;
public FILETIME ftLastAccessTime;
public FILETIME ftLastWriteTime;
public uint nFileSizeHigh; //changed all to uint from int, otherwise you run into unexpected overflow
public uint nFileSizeLow; //| http://www.pinvoke.net/default.aspx/Structures/WIN32_FIND_DATA.html
public uint dwReserved0; //|
public uint dwReserved1; //v
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = MAX_PATH)]
public string cFileName;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = MAX_ALTERNATE)]
public string cAlternate;
}
[DllImport("kernel32", CharSet = CharSet.Unicode)]
private static extern IntPtr FindFirstFile(string lpFileName, out WIN32_FIND_DATA lpFindFileData);
[DllImport("kernel32", CharSet = CharSet.Unicode)]
private static extern bool FindNextFile(IntPtr hFindFile, out WIN32_FIND_DATA lpFindFileData);
[DllImport("kernel32.dll", SetLastError = true)]
private static extern bool FindClose(IntPtr hFindFile);
#endregion
/// <summary>
/// 拷贝
/// </summary>
/// <param name="sourceDirectory">源文件</param>
/// <param name="targetDirectory">目标文件夹</param>
public void Copy(String sourceDirectory, String targetDirectory)
{
IntPtr INVALID_HANDLE_VALUE = new IntPtr(-1);
WIN32_FIND_DATA findData;
IntPtr findHandle;
findHandle = FindFirstFile(sourceDirectory + "*.*", out findData);
if (findHandle != INVALID_HANDLE_VALUE)
{
do
{
if ((findData.dwFileAttributes & FileAttributes.Directory) != 0)
{
if (findData.cFileName != "." && findData.cFileName != "..")
{
Copy(String.Format("{0}{1}{2}", sourceDirectory, findData.cFileName, "\\"), targetDirectory);
}
}
else
{
String strFile = sourceDirectory + findData.cFileName;
if (File.Exists(strFile))
{
try
{
FileInfo fileInfo = new FileInfo(strFile);
String strCopyTargetFile = String.Format("{0}{1}", targetDirectory, fileInfo.Name);
if (CopyProgress != null)
{
// 触发事件,通知界面
CopyProgress(strFile, strCopyTargetFile);
}
// 拷贝文件
File.Copy(strFile, strCopyTargetFile);
}
catch
{
}
}
}
}
while (FindNextFile(findHandle, out findData));
FindClose(findHandle);
}
}
}
}
private delegate void SetProgressBar(int value);
private void SetPBar(int value)
{
if (this.InvokeRequired)
this.Invoke(new Action<int>(SetPBar), value);
else
{
this.progressBar1.Value = value;
}
}
private void SetValue()
{
SetProgressBar setbar = new SetProgressBar(SetPBar);
for (int i = 0; i < 100000; i++)
{
setbar.Invoke(i);
}
}
private void button10_Click(object sender, EventArgs e)
{
progressBar1.Maximum = 100000;
Thread thread = new Thread(new ThreadStart(SetValue));
thread.Start();
}