C#应用程序在VS中不会崩溃,但在系统运行时会崩溃

本文关键字:崩溃 系统 运行时 应用程序 VS | 更新日期: 2023-09-27 18:24:49

我正在开发一个简单的测试工具来验证客户服务器在1秒内可以详细说明多少HASH(SHA1)。

所附的示例使用多线程来启动和停止计时器,该计时器对已执行的HASH进行计数。HASHE是连续的。

该应用程序在VisualStudio中运行良好,但如果我在VS环境之外运行它,它就会崩溃。

问题出在"using"部分的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

C#应用程序在VS中不会崩溃,但在系统运行时会崩溃

您的程序可能会抛出异常,并且它正在被写入控制台,但在写入消息后,您无法立即阻止控制台关闭。

在try/catch块之后添加一个Console.ReadKey();