使用了c#高内存。适用于ManagementObjectSearcher
使用线程。但我不能阻止它。线程始终运行,应用程序占用内存高。使用了c#高内存。适用于ManagementObjectSearcher,c#,multithreading,usb,C#,Multithreading,Usb,使用线程。但我不能阻止它。线程始终运行,应用程序占用内存高。 几分钟后给出一个错误。可能我不能使用函数true。这是因为您在没有任何退出条件的情况下递归调用线程的方法。这最终将导致一个堆栈溢出异常 与此方法不同,您应该在线程的方法中放置while循环这当然是粗略地实现的,只是为了给您一个想法: private void Form1_Load(object sender, EventArgs e) { t = new Thread(new ThreadStart(serialcek));
几分钟后给出一个错误。可能我不能使用函数true。这是因为您在没有任何退出条件的情况下递归调用线程的方法。这最终将导致一个
堆栈溢出异常
与此方法不同,您应该在线程的方法中放置while
循环这当然是粗略地实现的,只是为了给您一个想法:
private void Form1_Load(object sender, EventArgs e)
{
t = new Thread(new ThreadStart(serialcek));
CheckForIllegalCrossThreadCalls = false;
t.Start();
}
public void serialcek()
{
ManagementObjectSearcher theSearcher = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive WHERE InterfaceType='USB'");
try
{
foreach (ManagementObject currentObject in theSearcher.Get())
{
ManagementObject theSerialNumberObjectQuery = new ManagementObject("Win32_PhysicalMedia.Tag='" + currentObject["DeviceID"] + "'");
try
{
serial = theSerialNumberObjectQuery["SerialNumber"].ToString();
textBox1.Text = serial;
}
catch (Exception)
{
// MessageBox.Show("Bişiler oldu bende anlamadım");
}
}
Thread.Sleep(sure);
serialcek();
}
catch (Exception ex)
{
MessageBox.Show("Patladım ben." + ex.Message.ToString());
}
}
然后,只要将true
分配给exitThread
,您就可以随时退出此线程:
bool exitThread;
private void Form1_Load(object sender, EventArgs e)
{
t = new Thread(new ThreadStart(serialcek));
CheckForIllegalCrossThreadCalls = false;
exitThread = false;
t.Start();
}
public void serialcek()
{
ManagementObjectSearcher theSearcher = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive WHERE InterfaceType='USB'");
while (! exitThread)
{
try
{
foreach (ManagementObject currentObject in theSearcher.Get())
{
ManagementObject theSerialNumberObjectQuery = new ManagementObject("Win32_PhysicalMedia.Tag='" + currentObject["DeviceID"] + "'");
try
{
serial = theSerialNumberObjectQuery["SerialNumber"].ToString();
textBox1.Text = serial;
}
catch (Exception)
{
// MessageBox.Show("Bişiler oldu bende anlamadım");
}
}
}
catch (Exception ex)
{
MessageBox.Show("Patladım ben." + ex.Message.ToString());
}
finally
{
// Moved Sleep into 'finally' block to make it be called even if an exception occurs
Thread.Sleep(sure);
}
}
private void Button1_Click(object sender, EventArgs e)
{
exitThread = true;
}