|
671
|
Programación / .NET (C#, VB.NET, ASP) / (SOLUCIONADO) Problema con Listview
|
en: 6 Agosto 2013, 19:24 pm
|
Estoy intentando hacer una manera para recuperar los items de un listview si la aplicación se cierra o se mata indebídamente. El listview está en modo "detalles" y tiene 3 columnas. Para guardar los items, hago esto: Dim Recovery_Items As New List(Of Tuple(Of Integer, String, String))() Private Sub Recovery_Timer_Tick() Handles Recovery_Timer.Tick Recovery_Items.Clear() For Each item As ListViewItem In ListView_Monitor.Items Recovery_Items.Add(Tuple.Create(item.Index, item.SubItems(1).Text, item.SubItems(2).Text)) Next IO. File. WriteAllText("Recovery.tmp", String. Join(vbNewLine, Recovery_Items ), System. Text. Encoding. Default) End Sub
...Lo cual me genera esto en un archivo de texto: (0, Valor1, Valor2) (1, V-a-l-o-r-1, V-a-l-o-r-2) (2, V,a,l,o,r,1, V,a,l,o,r,2) Ahora, ¿Como puedo parsear/castear el contenido del archivo de texto para agregarlo como item del listview en sus respectivas columnas?Un ejemplo de lo que intento hacer, esto sucedería al iniciar la aplicación: Private Sub Recovery() If IO. File. Exists("Recovery.tmp") Then For Each Line As String In IO. File. ReadAllLines("Recovery.tmp") ListView_Monitor.Items.Add(TryCast(Line, ListViewItem)) Next End If End Sub
Pero claro... al contener tantas comas los valores, no puedo hacer un Split, ni se me ocurre nada que hacer.
|
|
|
672
|
Programación / .NET (C#, VB.NET, ASP) / (SOLUCIONADO) ¿Tri-Dictionary?
|
en: 6 Agosto 2013, 18:41 pm
|
Necesito crear una colección donde se almacenen 3 valores, como por ejemplo en esta tupla: Dim Recovery_Items As Tuple(Of Integer, String, String)
El problema es que necesito un contenedor de capacidad "infinita" para añadir más items, como por ejemplo un Dictionary con el método ".add", pero claro, esto no se puede hacer: Dim Recovery_Items As New Dictionary(Of Integer, String, String)
He intentado hacerlo en un Array de 3 dimensiones pero he acabado hecho un lio a la hora de redimensionarlo y agregar los items, no me sale bien. ¿Alguien me puede dar alguna sugerencia de como es la manera más práctica para hacer lo que necesito, que debería usar? Saludos
|
|
|
673
|
Comunicaciones / Redes / ONO, ¿mi opinión?... ESTAFADORES
|
en: 4 Agosto 2013, 18:18 pm
|
Al conectar mi adaptador de red (cable), después de unos minutos la conexión se vuelve increiblemente lenta, de la típica velocidad de descarga que tengo sobre los 1,80mb/s va descendiendo hasta la mitad y a veces hasta los 200-300 kb incluso hasta los 100kb/s de media... al rato. Si desconecto y vuelvo a conectar el router pues puedo descargar a velocidad normal (1,90 mb/s), pero como he dicho, solo dura unos pocos minutos... He testeado la velocidad descargando archivos directos de uploaded.net (soy premium) y de ISO's de la web de Microsoft y archivos de otros sitios, descargando diréctamente desde Firefox como desde el JDownloader, y aparte los tests online de velocidad también me dan el mismo resultado... Esto me pasa desde hace una o dos semanas, durante ese tiempo he reinstalado Windows 8 y me sigue pasando lo mismo... No tengo ninguna conexión remota extraña (Lo he mirado con TCPView) Tampoco tengo ningún proceso extraño corriendo. Los drivers de Ethernet son los correctos, siempre he dejado elegir a Windows los drivers, ningún problema con eso. El solucionador de problemas de internet de Windows me dice que todo va perfecto (mis cojones...) Un escaneo con el Kaspersky TDSSKiller no me encuentra nada. El Spybot search&Destroy tampoco encuentra nada. Y un escaneo profundo con el NOD32 tampoco encuentra nada. Aparte tengo el Firewall de Windows activado y no me ha advertido de nada hasta el momento. Y hmmm... Tengo el Defender desactivado. He probado a usar las DNS ipv4 de Google aunque no creo que esto tenga mucho que ver...pura desesperación... Y he probado a desactivar el límite QoS del sistema, pero nada... En fín no entiendo que puede ser... He llegado a pensar que podría ser un problema del nodo pero imagino que si fuese eso en estas dos semanas ya alguien habría reportado el problema a los de ONO... Lo más extraño es que a horas muy tempranas o muy nocturnas el problema desaparece como por arte de mágia... Ya no sé que programa puedo usar para comprobar si todo está bien o si alguien me está chupando banda ancha...¿Alguien tiene alguna sugerencia antes de llamar al apestoso soporte técnico de mi compañia para que me digan cosas absurdas que ya he probado? Un saludo.
|
|
|
674
|
Programación / .NET (C#, VB.NET, ASP) / (SOLUCIONADO) Fuga de memória en una función :(
|
en: 4 Agosto 2013, 15:01 pm
|
Tengo una fuga de memória grave en una aplicación, y es debido a una Class de terceros que estoy usando... Este simple código aloja entre 100-200kb de RAM cada segundo Public Class Form1 Dim isbinded As Boolean = False Dim Winamp As clsWACC = New clsWACC Dim WithEvents mytimer As New Timer With {.Interval = 50, .Enabled = True} Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles mytimer.Tick isbinded = Winamp.Bind() ' Label1.Text = isbinded ' isbinded = Nothing End Sub End Class
Necesito usar un Timer rápido de menos de 50 ms, pero simplemente por curiosidad si aumento el Timer a 1000 ms la ram sigue subiendo sin pausa, aunque sube sólo 8 kb cada segundo. He intentado examinar y corregir la Class pero no encuentro el fallo, esta es la parte de la Class que manipula el code de arriba: Public Sub New(ByVal handle As IntPtr, ByVal str As String) 'opens the process hWinamp = OpenProcess(DAccess.PROCESS_ALL_ACCESS, False, waPID) 'If hWinamp.Equals(IntPtr.Zero) Then ' 'exception 'End If remStr = str remoteBuf = AllocWinamp(handle, Convert.ToUInt32(str.Length + 1)) Dim localBuf As IntPtr = Marshal.StringToHGlobalAnsi(str) WriteProcessMemory(hWinamp, remoteBuf, localBuf, str.Length + 1, Nothing) Marshal.FreeHGlobal(localBuf) End Sub
Dim path As String = Nothing Dim regKey As RegistryKey = Registry.CurrentUser.OpenSubKey("Software\Winamp", False) 'Binds to WinAmp Public Function Bind() As Boolean Return Bind("") End Function Public Function Bind(ByVal PathToExecutable As String) As Boolean hWnd_Winamp = WinAPI.FindWindow(lpClassName, Nothing) 'waProcess = New Process waProcess.EnableRaisingEvents = True 'If WinAmp window handle not found, try to launch it If hWnd_Winamp.Equals(IntPtr.Zero) Then 'if path was not specified, try to find it in the Windows registry If PathToExecutable = "" Then 'Dim path As String 'regKey = Registry.CurrentUser 'regKey = regKey.OpenSubKey("Software\Winamp", False) If regKey IsNot Nothing Then path = Convert.ToString(regKey.GetValue("")) waProcess.StartInfo.FileName = path & "\Winamp.exe" regKey.Close() Else Return False End If Else waProcess.StartInfo.FileName = PathToExecutable End If Try waProcess.Start() Catch ex As System.ComponentModel.Win32Exception When ex.ErrorCode = -2147467259 Debug. WriteLine("Executable not found") Return False Catch ex As Exception Debug. WriteLine("unknown exception") Return False End Try waProcess.WaitForInputIdle() hWnd_Winamp = waProcess.MainWindowHandle() waPID = waProcess.Id Else 'WinAmp handle found 'now bind to WinAmp process 'get PID from hWnd WinAPI.GetWindowThreadProcessId(hWnd_Winamp, waPID) If waPID = 0 Then Return False End If waProcess = Process.GetProcessById(waPID) waProcess.EnableRaisingEvents = True hWnd_Playlist = GetHWND(WinampWindow.Playlist) hWnd_Equalizer = GetHWND(WinampWindow.Equalizer) hWnd_Video = GetHWND(WinampWindow.Video) Return True End If 'if hWnd of the main window is still zero, 'it was not possible to launch or bind to WinAmp If hWnd_Winamp.Equals(IntPtr.Zero) Then Return False Else hWnd_Playlist = GetHWND(WinampWindow.Playlist) hWnd_Equalizer = GetHWND(WinampWindow.Equalizer) hWnd_Video = GetHWND(WinampWindow.Video) Return True End If End Function
Pero la primera condición no se cumple, es decir, solo se manipula esta parte de la función Bind: If hWnd_Winamp.Equals(IntPtr.Zero) Then ' NADA Else 'WinAmp handle found 'now bind to WinAmp process 'get PID from hWnd WinAPI.GetWindowThreadProcessId(hWnd_Winamp, waPID) If waPID = 0 Then Return False End If waProcess = Process.GetProcessById(waPID) waProcess.EnableRaisingEvents = True hWnd_Playlist = GetHWND(WinampWindow.Playlist) hWnd_Equalizer = GetHWND(WinampWindow.Equalizer) hWnd_Video = GetHWND(WinampWindow.Video) Return True End If
hWnd_Winamp es un IntPtr waProcess es un Process (el cual he probado a liberarlo pero sigue pasando lo mismo...) waPID es un Integer hWnd_Playlist es un IntPtr hWnd_Equalizer es un IntPtr hWnd_Video es un IntPtr ...y GetWindowThreadProcessId es esta función: '======================== ========================= '====================== GetWindowThreadProcessId ======================= '======================== ========================= 'Retrieves the identifier of the thread that created the specified window 'and, optionally, the identifier of the process that created the window. <DllImport("user32.dll", SetLastError:=True)> _ Public Shared Function GetWindowThreadProcessId( _ ByVal hwnd As IntPtr, _ ByRef lpdwProcessId As Integer) As Int32 End Function
y esta la función GetHWND: Private Shared Function GetHWND(ByVal Window As WinampWindow) As IntPtr Return SendWA_IPC(Window, Message.IPC_GETWND) End Function Private Shared Function SendWA_IPC(ByVal param As Int64, ByVal MessageName As Message) As IntPtr Return WinAPI.SendMessage(hWnd_Winamp, WinAPI.Msg.WM_USER, IntPtr.op_Explicit(param), IntPtr.op_Explicit(MessageName)) End Function '=============================== =============================== '============================= SendMessage ============================= '=============================== =============================== 'Sends the specified message to a window or windows. It calls the window 'procedure for the specified window and does not return until the window 'procedure has processed the message. <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _ Public Shared Function SendMessage(ByVal hWnd As IntPtr, _ ByVal Msg As Msg, _ ByVal wParam As IntPtr, _ ByVal lParam As IntPtr) As IntPtr End Function
¿Alguna sugerencia?Gracias...
|
|
|
675
|
Informática / Hardware / (SOLUCIONADO) Parones y Ralentización en la velocidad de transferencia de un HDD
|
en: 3 Agosto 2013, 04:09 am
|
Hola Tengo un cable como este donde tengo conectado el disco duro principal (Windows), y un disco duro secundario de almacenamiento: El disco duro principal es un WD Black, y el secundario un WD Green, los dos tienen menos de 5 meses. El problema es que si intento copiar un archivo pesado o muchos archivos sueltos desde el disco principal al secundario, la velocidad de transferencia va disminuyendo hasta quedarse sobre los 522 kb/s (juas), y jamás vuelve a subir la tasa ni a continuar el copiado, simplemente se ralentiza la velocidad de transaferencia y ahi se queda, sin moverse y sin terminar de copiarse el archivo, obligándome a reiniciar, porque si intento seguir copiando otro archivo distinto no me va a dejar hasta que reinicie. EDITO: De hecho... más bien tengo que apagar el equipo cuando me pasa eso, porque una vez reinicié después de un intento de copiado y al loguearme en Windows el HDD secundario NO SE RECONOCIA por el sistema, habia desaparecido vaya!... hasta que apagué bien el PC y lo volví a encender. Pero el disco secundario no tiene ningún tipo de problema, si hago la prueba con otro HDD secundario me pasa lo mismo, se vuelven "invisibles" xD. Ahora viene lo más extraño de todo para mi... Colocamos otro cable como estos en la fuente: y ahora, en el primer cable dejamos conectado el disco principal, y en este nuevo cable conectamos el disco seundario... de esta manera todo va como la seda al transferir archivos desde el disco principal. Aunque no soy técnico creo que el experimento demuestra que no se trata de un fallo de hardware (de los HDD al menos no) Tengo 4 HDD's y solo dos cables, así que necesito conectar un HDD junto al HDD principal...y esa idea no me gusta nada porque me da miedo perder datos del HDD principal o del HDD que esté conectado juno a él cuando vaya a intentar transferir archivos desde el HDD principal. No entiendo mucho sobre el flujo de datos compartidos al conectar dos HDD's en el mismo cable como el de la imágen... pero pienso que si eso se puede conectar así es porque no deberían ocurrir problemas... ¿Que conflicto puede estar causando que cuando tengo 2 HDD's conectados en el mismo cable me de estos problemas?· Debo decir que si copio archivos desde el disco secundario al disco principal no hay ningún tipo de problemas, tanto si estan los dos HDD conectados al mismo cable como si están "separados". · Los cables son nuevecitos también... · La fuente de alimentación es esta -> Be Quiet Pure Power L8 CM 630W Modular· Esto me pasa desde que tengo instalado Windows 8 xD, aunque no creo que esa sea la razón... en mi antiguo PC con Windows 7 también me empezó a pasar y fue uno de los motivos por los que me actualicé el PC... En fín, necesito ayuda y opiniones... Un saludo!
|
|
|
676
|
Informática / Hardware / Comprar cable fuente de alimentación
|
en: 3 Agosto 2013, 03:49 am
|
Hola (Lo siento si no me explico muy bien) Mi fuente de alimentación tiene espacio para 3 conectores donde pone "Drives", para conectar cables que conectan dispositivos... El caso es que la fuente lleva 3 cables, dos de esos cables solo tiene salidas SATA, como este: ...pero el tercer cables tiene todas las salidas IDE, y ahora necesito conectar un dispositivo SATA más pero no puedo al no tener suficientes cables... He ido a dos tiendas de informática y en las dos me dicen que ese tipo de cable NO se vende por separado, sólo se vende la fuente... ...cosa que me parece extraño, ¿si uno comprase una fuente de 200€ y necesitase comprar un maldito cable de repuesto, tiene que volver a comprar la fuente entera? He intentado acceder a la web de BeQuiet , el fabricante, para ver si venden cables sueltos http://www.bequiet.com/ pero sólo sale una imágen en grande y nada más...ni que estuviera hackeada, vaya! Mi pregunta es si saben donde puedo comprar un cable de esos...como el de la imágen, y que como se llama el susodicho cable xD. Un saludo...
|
|
|
677
|
Programación / .NET (C#, VB.NET, ASP) / Error: No es posible crear una nueva página de seguridad para la pila
|
en: 1 Agosto 2013, 15:19 pm
|
¿Alguien me puede explicar a que se debe este error?:No es posible crear una nueva página de seguridad para la pila Esto sucede al dejar una aplicación corriendo (en Standby digamos) durante 2 horas más o menos. Es muy dificil buscar información sobre el problema cuando el mensaje de error está en castellano, ya que si pongo el mensaje de error en Google la única información relacionada que aparece en los resultados es esto -> Wikipedia: Pila de llamadas <- ...Después de habermelo leido, me he quedado con esta parte: ...Usualmente hay exactamente una pila de llamadas asociado a un programa en ejecución (o más precisamente, con cada tarea o hilo de un proceso)... ...Si el empujar (push) consume todo el espacio asignado para la pila de llamadas, ocurre un error llamado desbordamiento de pila... ...No entiendo muy bien las explicaciones, pero yo no uso multi-threading en mi aplicación, y todas las funciones que devuelven un valor pues...eso, lo devuelven, y me parece que todo lo que apilo luego lo desapilo, aunque no entiendo ni se que tipo de datos son los que se apilan en una aplicación y cuales son los que puede que no se estén desapilando bien y como detectarlos. ¿Que debo examinar en mi código para intentar averiguar que puede ser el causante de este error?.EDITO: Creo que la traducción de mi problema al inglés sería -> Stack overflow <- EDITO 2: Las recursiones que hago en las subrutinas que uso siempre devuelven un valor es decir que su ejecución termina corréctamente (o eso creo), así que entonces esto no puede estar causando el error, ¿verdad? Si yo tengo esto, el desapilamiento (poping) de los datos es correcto, ¿no?: sub loquesea(sender as object) handles algún evento cualquiera sender.propiedad = uno(32) end sub function uno(valor as int32) return dos(valor) end sub function dos(valor as int32) ' hacer cosas... return valor modificado end function
...Es que entonces no entiendo que tipo de recursiones son las que no estoy desapilando, si en todas las subrutinas que llamo a otras subrutinas devuelvo un valor para terminar su ejecución. EDITO 3: Me asalta la duda de cual es el tamaño máximo del Stack (la pila), y si puedo agrandar ese tamaño (mientras busco una solución decente, claro). EDITO 4: Y también tengo la duda de si existe alguna forma para detectar recursividades conflictivas en un código, porque si tengo que modificar código y luego mantener la aplicación durante 2 horas cada vez para ver si se ha arreglado o no... vaya tela!, y además el analizador de código del VS no me indica ninguna sugerencia que corregir.
|
|
|
678
|
Programación / .NET (C#, VB.NET, ASP) / VisualStudio me ha creado la misma GUID para 2 aplicaciones distintas!
|
en: 26 Julio 2013, 19:04 pm
|
Hola. He hecho dos aplicaciones distintas, las dos son single-instance, y a la hora de intentar ejecutarlas al mismo tiempo no he podido. No quería creermelo pero lo que sucedia parecia ser muy obvio así que lo primero que se me ha ocurrido es ir a las propiedades de los proyectos para comprobar si las GUIDS eran iguales, y ...efectívamente!! las dos aplicaciones tenian la misma GUID, toma ya! ¿Como es esto posible?Las dos aplicaciones han sido creadas desde cero, quiero decir que no he copiado archivos sueltos de un proyecto a otro, y además son diferentes en todo menos en los recursos de imágenes utilizados, algunas subrutinas, y el nombre de la Class principal. No entiendo como ha pasado esto. Me gustaría que alguien me explicase que motivos pueden causar que VS use la misma GUID para dos aplicaciones complétamente distintas. Un saludo!
|
|
|
|
|
|
|