jak w temacie. Łączę się z bazą danych na cda.pl. Na moim komputerze wszystko działa idealnie, jednak przy kliknięciu na przycisk zaloguj, na innym komputerze wyskakuje okienko "program przestał działać". Co może być tym spowodowane?
Są dwa wyjścia żeby dowiedzieć się o co chodzi:
- To co Ci wyskakuje to komunikat o nieobsłużonym wyjątku. Zapnij kawałek kodu, który się łączy w
try catch
, skompiluj na nowo, odpal na innym komputerze i popatrz co nie działa. - W Narzędziach administracyjnych systemu Windows w Panelu sterowania jest sekcja dotycząca Aplikacji. Tam są logowane szczegóły również dotyczące niepołapanych wyjątków. Można sprawdzić bez rekompilacji programu.
Właśnie całą procedurę łączenia z bazą mam w try catch finally, Dodatkowo w oknie zamknięcia aplikacji pokazuje kod CLR20r3. Czytam właśnie o nim
Właśnie całą procedurę łączenia z bazą mam w try catch finally
To jeszcze nie oznacza, że wyjątek zostanie na 100% połapany :)
Skoro pojawia się systemowa informacja (taka standardowa, jak wtedy gdy wywala się jakaś aplikacja), że apka przestała działać to znaczy, że ten wyjątek nie został złapany.
zaznaczylem przy mysql.data [copy to local], wrzucilo mi dllke do folderu i działa juz na innych komputerach. jakis ja głupi...
Taki offtopowy przykładzik tego o czym pisałem w komentarzu to Twojego postu:
- Wyjątek niewyłapany mimo, że wystąpił (a to ciekawe :) ), a przecież blok
try catch
jest zdefiniowany:
using System;
using System.Text;
using System.Linq;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.IO;
using System.Windows.Forms;
class Program
{
public static void Main(string[] args)
{
var form = new Form();
form.Load += (sender, e) =>
{
try
{
var task = Task.Factory.StartNew(() =>
{
var array = new int[1];
array[2] = 0;
});
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
};
form.ShowDialog();
}
}
- Wyjątek połapany z poprzedniego wątku, bez jawnego
try catch
:
using System;
using System.Text;
using System.Linq;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.IO;
using System.Windows.Forms;
class Program
{
public static void Main(string[] args)
{
var form = new Form();
form.Load += (sender, e) =>
{
var task = Task.Factory.StartNew(() =>
{
var array = new int[1];
array[2] = 0;
}).ContinueWith((prev) =>
{
if (prev.Exception != null) MessageBox.Show(prev.Exception.ToString());
});
};
form.ShowDialog();
}
}
Jak widzisz try catch
nie zawsze " działa" :D Uruchom, a się przekonasz.
PS: var task
jest niepotrzebny ale na komórce już nie będę łamał palców, żeby to skasować więc wybaczcie ;-)