Ho appena fatto la stessa cosa: ho copiato il codice da te modificato, dentro l'evento click di un pulsante (sia con Windows Form che con WPF), e funziona. Solo che il controllo "if" che tu hai messo dopo il foreach, non va bene, perchè lui prende ogni linea del file della MAC-List, e con il ciclo foreach la confronta con la List sMacAddress (che è in memoria e che contiene i MAC del tuo PC). Dovresti fare così:
private void Button_Click(object sender, EventArgs e)
{
NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces();
List<string> sMacAddress = new List<string>(); //in questa lista ci andranno tutti i MAC Address del PC
foreach (NetworkInterface adapter in nics)
{
string sMac = adapter.GetPhysicalAddress().ToString();
if (sMac.Length == 0)
break;
sMacAddress.Add(sMac.Substring(0, 2) + ":" + sMac.Substring(2, 2) + ":" + sMac.Substring(4, 2) + ":" + sMac.Substring(6, 2) + ":" + sMac.Substring(8, 2) + ":" + sMac.Substring(10, 2));
}
using (StreamReader macList = new StreamReader("MAF.txt"))
{
string linea;
bool inizio = false;
bool infetto = false;
while ((linea = macList.ReadLine()) != null)
{
if (linea.Contains("MAC - list")) //cerca nel file l'inizio della lista dei MAC Address
{
inizio = true;
continue;
}
if (inizio == true)
{
foreach (string mca in sMacAddress)
{
if (linea.Contains(mca.ToLower()))
{
MetroFramework.MetroMessageBox.Show(this, "Your computer may be infected!!", "ATTENTION", MessageBoxButtons.OK, MessageBoxIcon.Error);
infetto = true;
break;
}
}
}
}
if (infetto == false)
{
MetroFramework.MetroMessageBox.Show(this, "Your computer is clear :)", "All done !", MessageBoxButtons.OK, MessageBoxIcon.Question);
}
}
}
In altre parole, puoi dichiarare che il tuo PC è pulito, solo dopo che hai finito i controlli su tutte le linee del file