Sei sulla pagina 1di 5

Programa C# Hilos

Nombre: Moreno Torres Ricardo Enrique


Carrera: Computación, Generación: 2014
Clave UASLP: 0236062 Clave Fac. Ing.: 201401500674
Materia: Supercomputo, Grupo: 222601
Fecha: 23/08/2019

1.-RESUMEN
En este documento se describe el código y funcionamiento de un programa que
consta del manejo de hilos, así como su manipulación para obtener el resultado de
dos funciones de manera simultánea permitiendo detenerse independientemente
sin afectar un procedimiento de otro.

2.-CONTENIDO
Bibliotecas declaradas:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Collections;
using System.Text.RegularExpressions;
using System.Threading;
using System.Diagnostics;
Variables globales:
Thread hilo,hilo2;
delegate void delegado(int valor);
string line;
string archivo;
string[] palabras;
int nRepeticiones;
string[] palrep;

Función para abrir el archivo y mostrar el contenido del mismo:


private void bAbrir_Click(object sender, EventArgs e){
string line;
OpenFileDialog openFileDialog1 = new OpenFileDialog();
openFileDialog1.Filter = "Txt|*.txt";
openFileDialog1.Title = "Abrir archivo";
if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK){
archivo = openFileDialog1.FileName;
tbArchivo.Text = archivo;
System.IO.StreamReader file = new System.IO.StreamReader(archivo); //Lee el archivo
while ((line = file.ReadLine()) != null){
rtbArchivo.Text += line + "\n";}
file.Close();}
pb1.Maximum = archivo.Length;
pb2.Maximum = archivo.Length;}
Función para iniciar el hilo y para ir contando los caracteres del archivo:
private void btIniciar_Click(object sender, EventArgs e){
cuentaCarcateres();
hilo = new Thread(new ThreadStart(cuentaCarcateres)); //Inicializacion del hilo
}
Función para iniciar el hilo y para ir contando las palabras del archivo:
private void btIniciar2_Click(object sender, EventArgs e){
cuentaPalabras();
hilo2 = new Thread(new ThreadStart(cuentaPalabras)); //Inicializacion del hilo
}
Función cuenta caracteres:
private void cuentaCarcateres()
{
var diccionario = new Dictionary<string,
int>(StringComparer.InvariantCultureIgnoreCase);
System.IO.StreamReader file = new System.IO.StreamReader(archivo); //Lee el archivo
while ((line = file.ReadLine()) != null){
for (int i = 0; i < line.Length; i++){
var caracter = line[i].ToString();
if (diccionario.ContainsKey(caracter)){
diccionario[caracter]++;}
else{
diccionario.Add(caracter, 1);}
delegado MD = new delegado(Actualizar1);
this.Invoke(MD, new object[] { i });
Thread.Sleep(70);}}
foreach (var entrada in diccionario){
rtbHilo1.Text += entrada.Key + "->" + entrada.Value + "\n";}
file.Close();}

Función cuenta palabras:


private void cuentaPalabras(){
palrep = new string[1000000];
System.IO.StreamReader file = new System.IO.StreamReader(archivo);//Lee el archivo
while ((line = file.ReadLine()) != null){
//Cuenta palabras
palabras = line.ToString().Split(' ');
for (int j = 0; j < palabras.Length; j++){
if (!palrep.Contains(palabras[j])){
palrep[j] = palabras[j];
nRepeticiones = Regex.Matches(File.ReadAllText(archivo), palabras[j],
RegexOptions.IgnoreCase).Count;
rtbHilo2.Text += palabras[j] + "->" + nRepeticiones + "\n";}
delegado MD2 = new delegado(Actualizar2);
this.Invoke(MD2, new object[] { j });
Thread.Sleep(70);}}
file.Close();}

Funciones para abortar los hilos:


private void btCancelar_Click(object sender, EventArgs e){
hilo.Abort();}
private void btCancelar2_Click(object sender, EventArgs e){
hilo2.Abort();}
Funciones para continuar los hilos:
private void btContinuar2_Click(object sender, EventArgs e){
hilo2.Start();}
private void btContinuar_Click(object sender, EventArgs e){
hilo.Start();}

FUNCIONAMIENTO:
Interfaz del programa:

Abrir archivo:
Se lee el archivo:

Se inicia el primer hilo:


Se inicia el segundo hilo y estan funcionando de manera simultanea:

3.- CONCLUSIONES
En este programa se pone en práctica el manejo de archivos, así como sus
operaciones como lectura y escritura e implementando hilos en las dos funciones
diferentes pero basadas en el mismo archivo, está complicado lograrlo de manera
simultánea, pero se me dificulto bastante el control de los hilos, no logre completar
el programa con todas sus especificaciones, me falta revisar más este tema ya
que a mi parecer es complejo.

4.-BIBLIOGRAFÍA
 https://www.codeproject.com/Questions/1193245/Start-stop-resume-a-
thread-Csharp
 https://docs.microsoft.com/en-
us/dotnet/api/system.threading.thread?redirectedfrom=MSDN&view=netfra
mework-4.8#methods
 https://stackoverflow.com/questions/10469687/how-to-pause-resume-a-
thread
 https://social.msdn.microsoft.com/Forums/es-ES/e35d28a1-5c1b-47df-
be09-2cae6290a597/cmo-pausarreanudar-un-thread?forum=vcses
 https://docs.microsoft.com/en-us/dotnet/standard/threading/pausing-and-
resuming-threads
 https://docs.microsoft.com/es-
s/dotnet/api/system.windows.forms.richtextbox.find?view=netframework-4.8
 https://social.msdn.microsoft.com/Forums/es-ES/a71ff0ce-91e1-46bb-809e-
5935e0b0e7e7/encontrar-palabras-duplicadas?forum=vbes

Potrebbero piacerti anche