2012-07-10 2 views
0

아주 간단한 프로그램을 만들었지 만 오른쪽 상단의 빨간 X를 사용하여 프로그램을 닫을 때 프로세스 아래에 나열된 Windows 작업 관리자에서 볼 수 있습니다. 프로그램이 계속 실행 중이고 메모리를 사용 중입니다. 어떻게 이것을 피할 수 있습니까?닫기 후에 Windows 양식이 닫히지 않습니까?

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using Microsoft.Xna.Framework.Input; 
using Microsoft.Xna.Framework; 

namespace PS3Controller 
{ 
public partial class Form1 : Form 
{ 
    GamePadState pad; 

    Vector2 centroIzq = new Vector2(138, 132); 
    Vector2 centroDer = new Vector2(139, 252); 

    float distancia = 20f; 

    float ledIzqAngulo = 0; 
    float ledDerAngulo = 0; 

    float ledIzqVelocidad = 0.0022f; 
    float ledDerVelocidad = 0.0022f; 


    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 

    } 

    private void timer1_Tick(object sender, EventArgs e) 
    { 
     pad = GamePad.GetState(Microsoft.Xna.Framework.PlayerIndex.One); 

     if (pad.Buttons.Y == Microsoft.Xna.Framework.Input.ButtonState.Pressed) 
      ledTtriangulo.Visible = true; 
     else 
      ledTtriangulo.Visible = false; 

     if (pad.Buttons.X == Microsoft.Xna.Framework.Input.ButtonState.Pressed) 
      ledCuadrado.Visible = true; 
     else 
      ledCuadrado.Visible = false; 

     if (pad.Buttons.A == Microsoft.Xna.Framework.Input.ButtonState.Pressed) 
      ledX.Visible = true; 
     else 
      ledX.Visible = false; 

     if (pad.Buttons.B == Microsoft.Xna.Framework.Input.ButtonState.Pressed) 
      ledCirculo.Visible = true; 
     else 
      ledCirculo.Visible = false; 

     if (pad.DPad.Left == Microsoft.Xna.Framework.Input.ButtonState.Pressed) 
      ledIzq.Visible = true; 
     else 
      ledIzq.Visible = false; 

     if (pad.DPad.Right == Microsoft.Xna.Framework.Input.ButtonState.Pressed) 
      ledDer.Visible = true; 
     else 
      ledDer.Visible = false; 

     if (pad.DPad.Up == Microsoft.Xna.Framework.Input.ButtonState.Pressed) 
      ledArriba.Visible = true; 
     else 
      ledArriba.Visible = false; 

     if (pad.DPad.Down == Microsoft.Xna.Framework.Input.ButtonState.Pressed) 
      ledAbajo.Visible = true; 
     else 
      ledAbajo.Visible = false; 

     if (pad.Buttons.Start == Microsoft.Xna.Framework.Input.ButtonState.Pressed) 
      ledStart.Visible = true; 
     else 
      ledStart.Visible = false; 

     if (pad.Buttons.Back == Microsoft.Xna.Framework.Input.ButtonState.Pressed) 
      ledSelect.Visible = true; 
     else 
      ledSelect.Visible = false; 

     if (pad.Buttons.LeftShoulder == Microsoft.Xna.Framework.Input.ButtonState.Pressed) 
      ledL1.Visible = true; 
     else 
      ledL1.Visible = false; 

     if (pad.Buttons.RightShoulder == Microsoft.Xna.Framework.Input.ButtonState.Pressed) 
      ledR1.Visible = true; 
     else 
      ledR1.Visible = false; 

     if (pad.Buttons.BigButton == Microsoft.Xna.Framework.Input.ButtonState.Pressed) 
      ledHome.Visible = true; 
     else 
      ledHome.Visible = false; 

     if (pad.Triggers.Left > 0) 
      ledL2.Visible = true; 
     else 
      ledL2.Visible = false; 

     if (pad.Triggers.Right > 0) 
      ledR2.Visible = true; 
     else 
      ledR2.Visible = false; 

     lblIzqX.Text = pad.ThumbSticks.Left.X.ToString(); 
     lblIzqY.Text = pad.ThumbSticks.Left.Y.ToString(); 
     lblDerX.Text = pad.ThumbSticks.Right.X.ToString(); 
     lblDerY.Text = pad.ThumbSticks.Right.Y.ToString(); 


     Vector2 ledIzqPos = new Vector2(
      (float)Math.Cos(ledIzqAngulo) * distancia, 
      (float)Math.Sin(ledIzqAngulo) * distancia); 

     Vector2 ledDerPos = new Vector2(
      (float)Math.Cos(ledDerAngulo) * distancia, 
      (float)Math.Sin(ledDerAngulo) * distancia); 

     if (pad.ThumbSticks.Right.X == 0 && 
      pad.ThumbSticks.Right.Y == 0) 
     { 
      ledPadDer.Top = 139; 
      ledPadDer.Left = 252; 
     } 

     if (pad.ThumbSticks.Left.X == 0 && 
      pad.ThumbSticks.Left.Y == 0) 
     { 
      ledPadIzq.Top = 138; 
      ledPadIzq.Left = 132; 
     } 


    } 
} 

}

+3

코드는 어디에 있습니까? –

+0

여러 가지 이유가있을 수 있습니다. 자세한 내용을 추가 할 수 있습니까? –

+0

코드를 보여 주시면 도와 드릴 수 있습니다. 우리에게 프로그램을 닫는 코드를 보여주십시오 –

답변

4

것은 ... 언젠가, 스레드가 당신의 OnClosing 방법으로이 작업을 수행 할 수 있습니다 ... 폼이 닫혀 있지만 실행 유지하는 과정을 유지하는 것이 프로세스의 모든 스레드를 닫으십시오 창문 양식 ......

+0

FromClosing에서 timer1.Enabled를 false로 설정했습니다. 지금 문제 없습니다. –

3

앱이 여전히 실행 중이거나 YourApp.vshost.exe인지 확인 하시겠습니까? vshost는 Visual Studio 용이며 프로젝트가 열려있는 동안 항상 실행됩니다.

+0

그건 내 두 번째 문제 xD를 해결합니다. –

관련 문제