我的问题如下:
 为了接受另一个应用程序的数据,我用了Setwindowlong,但是我发现我除了接受到想到的数据之外,还接受到了一些无用的消息。这导致了我的Form一直处于工作状态,CPU占用100%,而且Form没有响应。表现为Form的外观都无法看到,只看到几块白的,无法实现该Form的其他人机交互功能。请教如何解决?是否该使用线程?

解决方案 »

  1.   

    如果使用了循环等操作,在每一次循环时调Application.DoEvents。
      

  2.   

    Setwindowlong,Setwindowlong,Setwindowlong你Set了什么啊?窗口子类化?? 还是什么??是C#?还是C?C#能子类化?本进程的?跨进程的?
      

  3.   

    没有使用循环,我定义了一个委托,把委托和我的窗口句柄给了Windows,然后调用另一个应用程序的API,将我的窗口注册到它上面,它就会向我的窗口发送消息,那么我通过我SetWindowlong的委托接收到数据。就是这样的流程。如何解决窗口一直工作的问题呢?大家有没有遇到过类似的问题啊。
      

  4.   

    实在不知所云SetWindowLong 你设置了什么? GWL_WNDPROC?窗口过程本来就是不断处理消息的你的占用100%说明你程序本身有问题
      

  5.   

    我的代码具体如下:public static void SetHooK(IntPtr Handle)
            {
                MyWindowsCallbackFunction = new WindowsCallbackFunction(WindowProc);            Global.lpPrevWndProc = SetWindowLong(Handle, GWL_WNDPROC, Marshal.GetFunctionPointerForDelegate(MyWindowsCallbackFunction));
                            
            }
    public static void InitReciveForm(IntPtr frmhandle)
            {
                //2 注册窗口
                
                handle = LoadLibrary("STOCK.DLL");
                IntPtr address = GetProcAddress(handle, "Stock_Init");                                 
                Stock_Init stockinit = (Stock_Init)Marshal.GetDelegateForFunctionPointer(address, typeof(Stock_Init));
                stockinit(frmhandle.ToInt32(), 0x8001, 4);
            }public void StartRecive(IntPtr handle)
            {
                //注册窗口
                InitReciveForm(handle);            //Hook
                SetHooK(handle);
                
            }
    请帮我看看哪有问题?
      

  6.   

    你导出dll的方法我还是第一次见
    为什么不用dllimport
      

  7.   

    dllimport能获得DLL的句柄不?我这里要的是DLL实例的句柄。继续等待高手光临再加点分吧