- まりも
- ベテラン
- 会議室デビュー日: 2006/08/19
- 投稿数: 77
|
投稿日時: 2008-07-15 23:30
大変あてずっぽうなのでたぶん違うとは思うのですが、
Aのところを、
catch (Exception ex)
{
throw;
}
としたら何とかなったりしませんか?
|
- ぴあちゃん
- ぬし
- 会議室デビュー日: 2008/02/07
- 投稿数: 287
|
投稿日時: 2008-07-16 03:05
throw new EpsonPrinterException("エラーだよ");
とかやらんの?
分かってるならありかもしれないけど分かってないのだから
何でもキャッチとまた投げは良くない。
捕まえる方が良い部分では、EpsonPrinterException 例外だ
けを捕まえてその他は無視するか上位の実装に委ねる。
コード: |
|
catch
{
throw; A←ここまでメッセージを引継ぎたい
}
|
C# ってゆーのはこーゆー書き方も出来るのだ、かもしれませんが、
なれないうちは手抜きみたいな書き方しないほうがよろしいと。
コード: |
|
Public Class EpsonPrinterException : Inherits Exception
Public Sub New(ByVal s As String)
MyBase.New(s)
End Sub
End Class
Public Class PrinterCore : Implements IDisposable
Private disposedValue As Boolean = False ' 重複する呼び出しを検出するには
' IDisposable
Protected Overridable Sub Dispose(ByVal disposing As Boolean)
If Not Me.disposedValue Then
If disposing Then
Console.WriteLine("共有リソースの開放")
End If
Console.WriteLine("アンマネージリソースの開放")
End If
Me.disposedValue = True
End Sub
#Region " IDisposable Support "
' このコードは、破棄可能なパターンを正しく実装できるように Visual Basic によって追加されました。
Public Sub Dispose() Implements IDisposable.Dispose
' このコードを変更しないでください。クリーンアップ コードを上の Dispose(ByVal disposing As Boolean) に記述します。
Dispose(True)
GC.SuppressFinalize(Me)
End Sub
#End Region
End Class
Public Class EpsonPrinter
Public Shared Sub Print(ByVal file As String)
Try
Using pc As New PrinterCore
Throw New EpsonPrinterException("エプソンエラーです")
End Using
Catch ex As Exception
Throw ex ''ココ
End Try
End Sub
End Class
''--------------
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Try
EpsonPrinter.Print("ファイル名")
Catch ex As Exception
Console.WriteLine(ex.StackTrace)
Console.WriteLine(ex.Message)
End Try
End Sub
|
VBだけど、こーすると、EpsonPrinterException のとこでエラー出しているのに
スタックトレースは 当然 "ココ" ですね。実際に出たところとエラー内容にくい
違いがでます。
もみ消しとはこーゆーことではなくて?
訂正:InnerException てのがあるんですね。知らんかった。
こいつが null参照になりますね。要するにまた投げするときに引き継げば
いいってことかな?
Throw New Exception("その他エラーに入り・・・", ex)
また投げするときはこー書けばいいのね。
[ メッセージ編集済み 編集者: ぴあちゃん 編集日時 2008-07-16 03:20 ]
|
- Jitta
- ぬし
- 会議室デビュー日: 2002/07/05
- 投稿数: 6267
- お住まい・勤務地: 兵庫県・海手
|
投稿日時: 2008-07-16 08:40
例外の再送は、throw だけです。
catch していないものを表示することは、当然できませんね。
|
- rain
- ぬし
- 会議室デビュー日: 2006/10/19
- 投稿数: 549
|
投稿日時: 2008-07-16 13:03
本題とは関係ない…かどうかはわかりませんが、
引用: |
|
Liquid_Forceさんの書き込み (2008-07-15 21:25) より:
コード: |
|
// Exist printer
foreach (string printerName in System.Drawing.Printing.PrinterSettings.InstalledPrinters)
{
if (printerName.Equals("EPSON Printer"))
{
printFlg = true;
break;
}
}
if (!printFlg)
{
throw new Exception("プリンターが見つかりません!"); @
}
|
|
そもそもここは、例外を使う場面ではないと思います。
|
- Liquid_Force
- 大ベテラン
- 会議室デビュー日: 2003/08/28
- 投稿数: 102
|
投稿日時: 2008-07-16 17:05
みなさん、ありがとうございました。
throw new Exception("プリンターが見つかりません!");
を catch してさらに throw していた為にメッセージが
なくなっていたようです。try〜catch の外で throw したら
上までメッセージが引き継がれました。
コード: |
|
// Exist printer
foreach (string printerName in System.Drawing.Printing.PrinterSettings.InstalledPrinters)
{
if (printerName.Equals("EPSON Printer"))
{
printFlg = true;
break;
}
}
◆tryの枠外に移動◆
if (!printFlg)
{
throw new Exception("プリンターが見つかりません!"); @
}
try ←ここにtryを移動
{
printProcess.StartInfo.FileName = "Acrobatのパス";
printProcess.StartInfo.Verb = "open";
printProcess.StartInfo.Arguments = " /n /t " + printFile;
printProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
printProcess.StartInfo.CreateNoWindow = true;
printProcess.Start();
// wait time two secound
printProcess.WaitForExit(2000);
}
catch (Exception ex)
{
throw ex;
}
|
|
- Jitta
- ぬし
- 会議室デビュー日: 2002/07/05
- 投稿数: 6267
- お住まい・勤務地: 兵庫県・海手
|
投稿日時: 2008-07-16 20:04
(´?ω?`)
違うよ
|
- Liquid_Force
- 大ベテラン
- 会議室デビュー日: 2003/08/28
- 投稿数: 102
|
投稿日時: 2008-07-16 20:07
あれ?
やっぱり強引ですか。
理解不足でやった対応なので違いますよね。
もっと調べてみます。。。
|
- Jitta
- ぬし
- 会議室デビュー日: 2002/07/05
- 投稿数: 6267
- お住まい・勤務地: 兵庫県・海手
|
投稿日時: 2008-07-17 07:24
catch (Exception ex)
としているところと、
catch
としているところがあります。何故ですか?
このふたつで、何が変わりますか?
throw ex;
としているところと、
throw;
としているところがあります。何故ですか?
このふたつで、何が変わりますか?
|