2012-04-28 13 views
4

私はスーパーマーケットのためのチェックアウトシステムを作成しています。チェックアウト、サーバーとMISプログラムで構成され、それらの間でWCFサービスが動作します。私が持っている問題は、Windowsフォームであるチェックアウトプログラムがapplication_loadメソッドでいくつかの必要を満たしてから終了することです。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 CheckoutLibrary; 
using Checkout.ServerLibraryService; 
using Checkout.MarketService; 

namespace Checkout 
{ 
    public partial class theForm : Form 
    { 
     private static int checkoutID = 3; 
     private Product[] allProducts; 

     public theForm() 
     { 
      InitializeComponent(); 
     } 

     private void theForm_Load(object sender, EventArgs e) 
     { 
      // First cache all products 
      SupermarketServiceSoapClient marketService = new SupermarketServiceSoapClient(); 
      allProducts = marketService.GetAllProducts(); 
      // Load the service provided by the server 
      ServiceClient serverService = new ServiceClient(); 
      // Load the event handlers for the bar code scanner 
      BarcodeScanner scanner = new BarcodeScanner(); 
      scanner.ItemScanned += new BarcodeScanner.ItemScannedHandler(scanner_ItemScanned); 
      scanner.AllItemsScanned += new BarcodeScanner.AllItemsScannedHandler(scanner_AllItemsScanned); 
      scanner.Start(checkoutID); 
     } 

     void scanner_AllItemsScanned(EventArgs args) 
     { 
      throw new NotImplementedException(); 
     } 

     void scanner_ItemScanned(ScanEventArgs args) 
     { 
      itemTextBox.Text = "Scanned " + GetItemName(args.Barcode); 
     } 

     private void scanItemButton_Click(object sender, EventArgs e) 
     { 
      scanner_ItemScanned(new ScanEventArgs(GetRandBarcode())); 
     } 

     // A barcode -> product name look up method 
     public string GetItemName(int barcode) 
     { 
      return allProducts[barcode].Description + " @ " + allProducts[barcode].Price; 
     } 

     // Method to grab a random barcode for simulation 
     private int GetRandBarcode() 
     { 
      Random rand = new Random(); 
      return rand.Next(0,500); 
     } 
    } 
} 

とのProgram.cs:任意の洞察力のための

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Windows.Forms; 

namespace Checkout 
{ 
    static class Program 
    { 
     /// <summary> 
     /// The main entry point for the application. 
     /// </summary> 
     [STAThread] 
     static void Main() 
     { 
      Application.EnableVisualStyles(); 
      Application.SetCompatibleTextRenderingDefault(false); 
      Application.Run(new theForm()); 
     } 
    } 
} 

おかげ

は、ここでは、コードです。

+0

フォーム(show/showdialog)を開くコードを表示できますか? – Steve

+0

のように、program.csの内容は? – Lee

+0

@bugfixrのあなたのコメントを見ることは、もはや必要ではありません。あなたのフォームには明らかです。では、_scanner_AllItemsScanned_イベントにブレークポイントを設定してみましょう。スキャナが起動したときにイベントの一部が実行されないようにするだけです。 – Steve

答えて

4

WinFormsでは、form_loadが例外をスローすると、何も表示せずに終了します。迷惑だが、私はそれが問題だと思っている。

try/catchを試すか、CTRL+ALT+Eを入力してThrown ColumnCommon Language Runtime Exceptionsを入力すると、エラーが表示されます。

はUPDATE:

コメントに基づいて、ここでは別のスレッド上で何かを実行するためのサンプル方法です。

ThreadStart ts = new ThreadStart(() => { 
    try { 
     scanner.Start(checkoutID); 
    } catch { 
     // Log error 
    } 
}); 
Thread t = new Thread(ts); 
t.Start(); 
+0

ああ、私はそれを考えましたが、私は未処理の例外が予想されていました。私はこれを確認します、ありがとう。私は、サービスの1つを初期化しようとすると例外がスローされる可能性があるという疑いがあります。 – Lee

+0

Try-Catchは例外を検出しませんでした。実際、catchブロック内のブレークポイントはトリガされませんでした。うーん.. – Lee

+0

コードの最初の行にブレークポイントが実際にヒットしますか? CTRL + ALT + E(Debug/Exceptionsメニューにもあります)の "投げられた"列をチェックするのはどんな運がありますか? – bugfixr

関連する問題