|
72
|
Programación / .NET (C#, VB.NET, ASP) / Re: poner en pausa datos grilla c#
|
en: 30 Agosto 2022, 21:05 pm
|
No entendi ni verga de tu problema. Parece que Por lo que entendi , en el frmmesas tienes (Objetos de mesas) al presionar la mesa 5 , abres un formulario frmconanda Este formulario lo llenas de nuevo, (con botones) , y en ese formulario tienes la informacion ( BindingList<Comanda_Detalle> por lo que tengo entendido). Si es correcto lo que entendi. Entonces hay varias cosas que arreglar. sobre todo como tienes la estructura de tu codigo. Primero que todo si quieres guardar la Lista BindingList<Comanda_Detalle>, de la mesa 5 ( frmconanda). Almacenalo en otro lugar, como por ejemplo una clase diferente. ademas puedes mejorar en vez de usar una lista, usar un Diccionario, y al KeyPairValue , le pasas a la Key la ID de la mesa, y en Value , el objeto Comanda_Detalle. Por cierto , si cierra el ( frmconanda) que carga la lista, y luego lo cierras, Posiblemente no te acceso a el. por cierto, con tal estructura, la memoria deberia ser un desastre, tantos formularios abiertos, por cada mesa, y no veo que tengas una forma de liberar el objeto de la memoria, Dispose.
private void button1_Click(object sender, EventArgs e) { FrmMesas form = new FrmMesas (); this.Hide(); form.ShowDialog(); this.Show(); } se oculto pero aperecieron dos instancia del formulario Frmesas esto es lo que tengo en el boton formulario mesas
No se a que te refieres, pero estas creando un nuevo Frmesas con cada click, por lo tanto deberias tener mas de una instancia, ya que cada click , es una nueva instancia de Frmesas
|
|
|
73
|
Programación / .NET (C#, VB.NET, ASP) / Re: Como usar una función public List de una clase C#
|
en: 30 Agosto 2022, 20:31 pm
|
No he usado unity, pero ... OnResult Es una funcion que retorna una Lista de KeyValuePair, osea que tiene como Key TargetController y Value Matrix44FA la funcion OnResult tambien debes pasarle un parametro FrameFilterResult hay un identeificador Optional, no se para que sirve, pero si es lo mismo que en VB, entonces no hay necesidad de pasarle parametro, ya que es opcional. FrameFilterResult FrameFilterEX; List<KeyValuePair[<TargetController, Matrix44F>]> OnResultData = OnResult(FrameFilterEX); foreach (KeyValuePair[<TargetController, Matrix44F>] ResultData in OnResultData) { TargetController TargetControllerEx = ResultData.Key; Matrix44F MatrixEx = ResultData.Value; }
Seria algo como eso, Osea no tal cual, pero si similar.
|
|
|
74
|
Programación / .NET (C#, VB.NET, ASP) / Re: Saludos Ayuda con función demorosa
|
en: 30 Agosto 2022, 19:52 pm
|
Buenas tardes, Su ayuda en un programa desarrollado en vb.net para windows net.framework 4.5.2 estoy usando la función File.Exists, pero la primera vez que carga, demora demasiado, 3 a 5 minutos sin dar respuesta, las siguientes no tarda nada.
Dim pUbicacion As String = tbLocales.Rows(cbLocales.SelectedIndex).Item(2).ToString If Not File.Exists(pUbicacion) Then MsgBox("No exixte el archivo: " & pUbicacion) Exit Sub End If
Dim Reader As New Microsoft.VisualBasic.FileIO.TextFieldParser(pUbicacion)
Si me pueden ayudar con alguna idea para no desesperar al usuario
Primeramente es imposible que te tarde tanto el verificar si el archivo existe. (A no ser que tengas un disco extremadamente lento o que tenga sectores dañados.) Segundo, Intenta un Debug.Writeline, en cada linea de codigo , para ver en que parte en especifico esta tardando.
|
|
|
77
|
Programación / .NET (C#, VB.NET, ASP) / Re: Obtener Informacion acerca del modulo correspondiente al StartAdress del Thread.
|
en: 18 Junio 2022, 19:43 pm
|
Que demonios!! Funciona. Gracias por tomarte el tiempo en esto .
Ayer lo logre de esta manera, Primero me descargue el codigo del ProcessHacker y me puse a analizarlo. Al final, tome todo el proyecto del PH y lo puse en 1 API : https://github.com/DestroyerDarkNess/Xylon.PH , Despues facilmente use el codigo del PH al final asi quedo : https://github.com/DestroyerDarkNess/ProcessThreadInfo Private WithEvents _threadP As ThreadProvider = Nothing Private Sub buttonWalk_Click(sender As Object, e As EventArgs) Handles buttonWalk.Click Dim processEx As Process = System.Diagnostics.Process.GetProcessById(TextBox1.Text) listViewCallStack.Items.Clear() _threadP = New ThreadProvider(processEx.Id) _threadP.LoadKernelSymbols() _threadP.Run() End Sub Private Sub _threadP_BeforeUpdate() Handles _threadP.BeforeUpdate listViewCallStack.Items.Clear() End Sub Private Sub _threadP_ResolveSybol(sender As Object, e As ThreadProvider.ResolveSybolData) Handles _threadP.ResolveSybol Me.BeginInvoke(Sub() Debug. WriteLine("TID: " & e. TID & " StartAdress: " & e. ResolveInfo. Symbol) Dim ItemN As New ListViewItem ItemN.Text = e.TID ItemN.SubItems.Add(e.ResolveInfo.Symbol) listViewCallStack.Items.Add(ItemN) End Sub) End Sub Private Sub _threadP_Error(ex As Exception) Handles _threadP.[Error] MsgBox(ex.Message) End Sub
Bueno espero que este post ayude a alguien mas que pase por esta duda. Gracias @RayR
|
|
|
79
|
Programación / .NET (C#, VB.NET, ASP) / Re: Obtener Informacion acerca del modulo correspondiente al StartAdress del Thread.
|
en: 15 Junio 2022, 23:26 pm
|
Hola, De tanto buscar encontre este codigo Fuente : https://github.com/itsmeny/Process_Thread_Info basicamente todo lo que necesito pero , hay un pequeño detalle , no funciona, o al menos a mi no me funciona, el error esta en la funcion del dbghelp SymFromAddr . No se si son los parametros correctos , de verdad no se por que me da el error. Coloco la funcion importante : public static String GetThreadStartAddress(IntPtr hProc, uint threadId) { IntPtr hThread = IntPtr.Zero; GCHandle handle = default(GCHandle); try { hThread = DbgHelpNative.OpenThread(DbgHelpNative.ThreadAccess.QUERY_INFORMATION, false, threadId); if (hThread == IntPtr.Zero) { throw new Win32Exception ("OpenThread failed"); } var threadAddress = new IntPtr [1]; handle = GCHandle.Alloc(threadAddress, GCHandleType.Pinned); var result = NtQueryInformationThread(hThread, ThreadInfomationClass.threadquerysetwin32startaddress, handle.AddrOfPinnedObject(), IntPtr.Size, IntPtr.Zero); if (result != 0) { throw new Win32Exception (string.Format("NtQueryInformationThread failed; NTSTATUS = {0:X8}", result )); } DbgHelpNative.SymSetOptions(DbgHelpNative.Options.SYMOPT_UNDNAME | DbgHelpNative.Options.SYMOPT_DEFERRED_LOADS); if (!DbgHelpNative.SymInitialize(hProc, null, true)) { throw new Win32Exception ("SymInitialize failed"); } DbgHelpNative .SYMBOL_INFO symbolInfo = new DbgHelpNative .SYMBOL_INFO(); symbolInfo .SizeOfStruct = (uint)Marshal .SizeOf(typeof(DbgHelpNative .SYMBOL_INFO)) - 1024; symbolInfo.MaxNameLen = 1024; ulong displacement; if (!DbgHelpNative.SymFromAddr(hProc, (ulong)threadAddress[0], out displacement, ref symbolInfo)) { throw new Win32Exception ("SymFromAddr failed"); } return symbolInfo.Name; //return threadAddress[0]; } finally { if (hThread != IntPtr.Zero) { DbgHelpNative.CloseHandle(hThread); } if (handle.IsAllocated) { handle.Free(); } } }
Falla justo aqui : if (!DbgHelpNative.SymFromAddr(hProc, (ulong)threadAddress[0], out displacement, ref symbolInfo)) { throw new Win32Exception ("SymFromAddr failed"); }
No se que podria estar mal, alguna Idea ?
|
|
|
80
|
Programación / .NET (C#, VB.NET, ASP) / Re: Obtener Informacion acerca del modulo correspondiente al StartAdress del Thread.
|
en: 14 Junio 2022, 00:59 am
|
Más o menos, aunque la función devuelve un simple entero, y alguno de los parámetros no es del todo exacto. En C# sería algo así: [DllImport("ntdll.dll", CharSet = CharSet.Unicode, SetLastError = true)] static extern int NtQueryInformationThread(IntPtr ThreadHandle, ThreadInfoClass ThreadInformationClass, IntPtr ThreadInformation, int ThreadInformationLength, IntPtr ReturnLength);
Para conseguir el StartAddress no importa si el enum está incompleto, ya que el único valor que necesitas es 9 (ThreadQuerySetWin32StartAddress). Por lo demás, y aunque no lo he probado, no veo por qué no habría de funcionar. Ya lo hice, pero para nada, esto obtiene el StartAdress. Lo mismo que yo obtengo en el codigo que puse al principio. Pero no obtiene El startAdress en la forma que quiero, (ModuleName+Offset adress)
como por ejemplo : CodeSmart.exe+0xb426eeSigo necesitando ayuda. se agradece cualquier sugerencia.
|
|
|
|
|
|
|