Что лучший способ состоит в том, чтобы собраться/сообщить неожиданные ошибки в Приложениях Окна.NET?

Я выполнил Custom ImageView:

public class RoundRectCornerImageView extends ImageView {

    private float radius = 18.0f;
    private Path path;
    private RectF rect;

    public RoundRectCornerImageView(Context context) {
        super(context);
        init();
    }

    public RoundRectCornerImageView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public RoundRectCornerImageView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init();
    }

    private void init() {
        path = new Path();

    }

    @Override
    protected void onDraw(Canvas canvas) {
        rect = new RectF(0, 0, this.getWidth(), this.getHeight());
        path.addRoundRect(rect, radius, radius, Path.Direction.CW);
        canvas.clipPath(path);
        super.onDraw(canvas);
    }
}

Как использовать:


Выход:

Надеюсь, это вам поможет.

6
задан sontek 27 September 2008 в 22:22
поделиться

3 ответа

Я предложил бы статью Jeff Atwood об Удобной для пользователя Обработке исключений, которая делает большую часть того, что Вы уже спрашиваете (Информация о приложении, Снимок экрана, Детали Исключения, ОС, Регистрируясь к текстовым файлам и Посылая по электронной почте), и содержит исходный код, таким образом, Вы добавляете дополнительный материал, в котором Вы нуждаетесь.

5
ответ дан 17 December 2019 в 00:17
поделиться

Можно присоединить к событию необработанного исключения и зарегистрировать его веб-сервис/и т.д.

[STAThread]
static void Main() 
{
    Application.ThreadException += new ThreadExceptionEventHandler(OnUnhandledException);
    Application.Run(new FormStartUp());
}
static void OnUnhandledException(object sender, ThreadExceptionEventArgs t) 
{
    // Log
}

Я также нашел это использование фрагмента кода AppDomain вместо ThreadException:

static class EntryPoint {
    [MTAThread]
    static void Main() {
        // Add Global Exception Handler
        AppDomain.CurrentDomain.UnhandledException += 
            new UnhandledExceptionEventHandler(OnUnhandledException);

        Application.Run(new Form1());
    }

    // In CF case only, ALL unhandled exceptions come here
    private static void OnUnhandledException(Object sender, 
        UnhandledExceptionEventArgs e) {
        Exception ex = e.ExceptionObject as Exception;
        if (ex != null) {
            // Can't imagine e.IsTerminating ever being false
            // or e.ExceptionObject not being an Exception
            SomeClass.SomeStaticHandlingMethod(ex, e.IsTerminating);
        }
    }
}

Вот некоторая документация относительно него: Необработанное исключение AppDomain

За пределами просто обработки его самостоятельно, нет действительно универсального способа сделать это, которое является допускающим повторное использование, это действительно должно быть интегрировано с интерфейсом приложения правильно, но Вы могли установить веб-сервис, который берет имя приложения, исключение и весь этот хороший материал, и имейте централизованную точку для всех своих приложений.

2
ответ дан 17 December 2019 в 00:17
поделиться

Можно хотеть изучить функцию сообщения об ошибке, встроенную в Читателя JetBrain Omea. Это имеет всеобъемлющий компонент обработки ошибок, который выталкивает диалоговое окно, когда неожиданная ошибка происходит. Пользователь может ввести больше деталей прежде, чем отправить проблему общедоступному веб-сервису ошибочного набора JetBrain.

Они сделали открытый исходный код Omea, чтобы позволить сообществу обновлять.NET 1,1 кодовых базы до v2 или 3. http://www.jetbrains.net/confluence/display/OMEA/this+link

0
ответ дан 17 December 2019 в 00:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: