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