我正在开发一个简单的测试工具来验证客户服务器可以在1秒内完成多少HASH(SHA1)。
附带的示例使用多线程来启动和停止计数执行HASH的计时器。 HASH是顺序的。
该应用程序在Visual Studio中运行良好,但如果我在VS环境之外运行它会崩溃。
问题在于“使用”部分的increment()函数。如果我评论它,一切都很好!
static void increment()
{
try
{
using (SHA1 sha = new SHA1CryptoServiceProvider())
{
byte[] result;
byte[] data = new byte[20];
new Random().NextBytes(data);
result = sha.ComputeHash(data);
}
Interlocked.Increment(ref safeInstanceCount);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
用于启动和停止时间的代码如下:
bool stop;
static void Main()
{
try {
TimerQueueTimer qt;
qt = new TimerQueueTimer();
TimerQueueTimer.WaitOrTimerDelegate CallbackDelete = new TimerQueueTimer.WaitOrTimerDelegate(QueueTimerCallback);
uint dueTime = uint.Parse(textBox1.Text); // string "60000" = 1 min
uint period = 0;
qt.Create(dueTime, period, CallbackDelete);
while (!stop)
{
// Thread thread = new Thread(new ThreadStart(increment));
// thread.IsBackground = true;
// thread.Start();
increment();
}
stop = false;
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
private void QueueTimerCallback(IntPtr pWhat, bool success)
{
try
{
stop = true;
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
我如何理解错误在哪里?
=
应用程序崩溃,没有任何异常。 我试图抓住它,没有成功,它发生在60秒后。 (也许会调用QueueTimerCallback?)
应用程序不会生成任何错误跟踪,并且它不会在Visual Studio下运行崩溃! 当它崩溃时它不会产生任何堆栈跟踪,只是一个弹出崩溃窗口,详细说明“StackHash_xxxxx”错误
无所事事!我尝试使用Console.Read(它是一个Windows应用程序而不是控制台),但我看不到任何东西。这是显示的错误! https://picasaweb.google.com/lh/photo/iHsBhRSy-DNTYVo4CpoeA9MTjNZETYmyPJy0liipFm0?feat=directlink
答案 0 :(得分:0)
您的程序可能会抛出异常,并且它已被写入控制台,但您没有任何东西可以阻止控制台在写入消息后立即关闭。
在try / catch块之后添加Console.ReadKey();
。