Laden...

Forenbeiträge von BerndFfm Ingesamt 3.823 Beiträge

12.02.2024 - 11:23 Uhr

Die App läuft weiterhin gut und zuverlässig ! 
Beim Deployment auf iOS kommen immer mal Fehler, jetzt hat er alle private Keys verloren. Dabei mache ich mit dem mac Mini sonst nichts.

Für die Offline Karten habe ich jetzt einen Tile Server in ASP.NET Core geschrieben, das ging echt einfach und läuft sehr schnell.
So kann man sich die Karten anschauen bevor man sie auf das Handy oder Tablet lädt. Oder man benutzt die Karte im Browser.
In einem Katastrophenfall kann ein lokaler Webserver mit den Karten bis zu 200 Einsatzkräfte und auch alle Rechner mit sehr genauen Karten versorgen. Zur Erinnerung : Im Ahrtal gab es keine Karten vor Ort für die Einsatzkräfte.

Hier der Startbildschirm vom neuen Map Server / Tile Server : https://finderwille.xddns.de:5003/

Hier die Open Street Map Karte von Deutschland : https://finderwille.xddns.de:8086/deutschland_zoomlevel_16.html

Hier die Liste aller verfügbaren Karten : https://finderwille.xddns.de:8086/maps.html

Jeder Karte ist eine SQLite-Datenbank, das Format nennt sich mbtiles-Format. Viele Karten-Apps können darauf zugreifen.

Die Offline Karten von Bulgarien, Türkei, Polen und Ukraine sind übrigens bei einigen Rettungseinsätzen in Benutzung.

Grüße Bernd

04.10.2023 - 12:35 Uhr

Die Bibliothek für die Zertifikatsrerzeugung funktioniert leider nicht. Sie hat die Stammzertifikate fest einprogrammiert, und die wurden ja bei LetsEncrypt inzwischen geändert. Es gibt zwar einen Befehl um den Neuen hinzuzufügen, der funktioniert aber leider nicht.

Jetzt benutze ich doch einen fertigen Certbot unter Windows. Der funktioniert auf Anhieb.

Website mit Zertifikat : https://finderwille.xddns.de:8086/

Ist eine SSD die in einen Raspberry Pi kommt.

Grüße Bernd

03.10.2023 - 12:43 Uhr

Hiermit muss ich meine Empfehlung für ZeroSSL zurücknehmen.

Jede Verlängerung eines 90-Tage Zertifikates zählt als neues Zertifikat. So muss man bei der vierten Verlängerung einen BASIC Plan für 10 oder 50$ pro Monat abschließen. Also reine Abzocke. Denn bei LetsEncrypt sind die SSL Zertifikate natürlich dauerhaft kostenlos.

Da ich ja eine dynamische IP habe kann ich die fertigen Lets Encrypt Clients nicht benutzen, die einen DNS-Zugriff auf die Domain verlangen. Ich mache die Überprüfung per http.

Hat jemand einen Tipp für einen Client oder Website ? Oder muss man das selber programmieren ?

Grüße Bernd

29.08.2023 - 13:58 Uhr

Man kann auch einfach eine Textbox mit Rahmen zeichnen.

Benutze ich z.B. in einem Fall für einen Fortschrittsbalken.

Grüße Bernd

28.08.2023 - 21:28 Uhr

Ich mach das in Xamarin.Forms so, sollte in Maui genauso funktionieren :

Nicht vergessen im Manifest die Berechtigungen zu setzen !

var customFileType = new FilePickerFileType(new Dictionary<DevicePlatform, IEnumerable<string>>
{
	{ DevicePlatform.iOS, new[] { "geojson", "gpx", "kml" } },
	{ DevicePlatform.Android, new[] { "geojson", "gpx", "kml" } }
});
var options = new PickOptions
{
	PickerTitle = "Eine Gpx-, Kml- oder Geojson-Datei auswählen"
	FileTypes = customFileType,
};
IEnumerable<FileResult> results = await FilePicker.PickMultipleAsync(options);
if (results == null) return;
foreach (FileResult result in results)
{
	if (result.FullPath.ToLower().EndsWith(".kml"))
	{
		...
	}
}
14.08.2023 - 21:25 Uhr

Zitat von JayDee72

auf dem WebServer läuft kein SQL Dienst

Auf dem Rechner mit dem SQL Server muss der Dienst "SQL Browser" laufen.

Grüße Bernd

14.08.2023 - 21:24 Uhr

Auf dem Rechner mit dem SQL Server muss der Dienst "SQL Browser" laufen.

Grüße Bernd

14.08.2023 - 15:18 Uhr

Welche SQL Server Version ? SQLEXPRESS ?

Du musst den Dienst SQL Browser aktivieren. Dann musst Du das Protokoll TCP/IP aktivieren. Dann Firewall Regeln einrichten oder beide Firewalls testweise abschalten.

Probiere von dem IIS Rechner aus per SQL Management Studio den SQL Server zu erreichen.

Grüße Bernd

14.08.2023 - 15:03 Uhr

Sicher dass IIS und SQL Server auf dem gleichen Rechner laufen ?

Was passiert mit dem lokalen IIS ohne Debug ?

Was passiert wenn man den IIS aus dem Netz anspricht mit Debug Version ?

Ist der Connectionstring in allen Fällen wirklich gleich ?

Grüße Bernd

03.05.2023 - 22:09 Uhr

Speichere das Projekt mal nach C:\Net

Im Vorgänger Xamarin Forms war regelmäßg ein Pfad zu lang für Windows. Da kam dann die gleiche Fehlermeldung.

Grüße Bernd

25.02.2023 - 17:02 Uhr

Eine Übertragung von einer in eine andere Datenbank würde ich nicht über den Umweg XML machen.

Ich lese und schreibe direkt, Voraussetzung ist natürlich dass beide Datenbank vom Rechner aus erreichbar sind.

So kann ich Typen umwandeln wenn nötig und auch Fehler abfangen, z.B. Spalte zu lang.

Gerade wenn die Übertragung öfter passiert ist schnell mal ein Feld verlängert in FoxPro.

Bei der Übertragung von SQL Server nach Oracle oder nach MySQL müssen z.B. Bit Typen oder Double Typen umgewandelt werden.


foreach (string tab in Tables())
{
...
	for (int i = 0; i < ds.Tables[tab].Rows.Count; i++)
	{
		...
		foreach (DataColumn col in ds.Tables[tab].Columns)
			foreach (DataColumn col2 in ds2.Tables[tab].Columns)
				if (col.ColumnName == col2.ColumnName)
					ds2.Tables[tab].Rows[0][col.ColumnName] = ConvertColumn(ds.Tables[tab].Rows[i][col.ColumnName]);
	}
}

Grüße Bernd

01.02.2023 - 22:34 Uhr

Ich würde eine weitere Seite öffnen.

Ein Fenster wo man das untere Fenster noch sieht benutzt man in der Regel auf Handys und Tablets nicht.



 Navigation.PushModalAsync(new SamplePage(), true);

...

Navigation.PopModalAsync(true)


Grüße Bernd

01.01.2023 - 22:23 Uhr

Ich habe jetzt ja schon einige Bildschirme mit XAML in Xamarin.Forms gemacht und ich finde die Benutzerfreundlichkeit beim Entwerfen sehr schlecht.

Man muss viele Sachen manuell machen. Bei verschiedenen Auflösungen des Displays, kommt bei Handys dauernd vor, muss man Buttongröße und Schriftgröße selber per Programm anpassen.

Abstände und Abstand zum Rand muss man auch für jedes Auflösung und für jedes Gerät einzeln berechnen.

Einige Controls sind nicht brauchbar, so ist es seit Jahren bekannt dass der Datetime Picker im Darkmode schwarz auf schwarz darstellt. Ich hoffe das ist in Maui besser.

Grüße Bernd

17.12.2022 - 23:41 Uhr

Die Berechtigung muss der Anwender manuell einstellen.

Beachte dass /storage/emulated/0/ im Handy Speicher gespeichert wird, /storage/sdcard1/ wird auf der SD-Card gespeichert.

Ich lese die beiden so :


 Parameter.SdCardPath = "";
Parameter.SdCardPath2 = "";
if (Build.VERSION.SdkInt >= BuildVersionCodes.Kitkat)   // ab API 19
{
    var dirs = GetExternalFilesDirs(null);
    if (dirs.Length > 1) Parameter.SdCardPath = dirs[1].AbsolutePath;
    if (dirs.Length > 1) Parameter.SdCardPath2 = dirs[0].AbsolutePath;
}

Grüße Bernd

15.12.2022 - 22:30 Uhr

So genau verstehe ich das nicht , aber ich glaube Du meinst :

[FAQ] Kommunikation von 2 Forms

Grüße Bernd

12.12.2022 - 19:47 Uhr

Ich hoffe meine Ausgangslage ist verständlich ausgedrückt

Ja, geht so.

Wieso der Umweg über die Listen ? Man könnte doch die Daten beim Lesen direkt in der Datenbank verarbeiten.

Insert kann man so machen, aber unbedingt Parameter benutzen. Und keine Umlaute in Spaltennamen.

[Artikelserie] SQL: Parameter von Befehlen

Ist den zu 100% sicher dass es den Artikel noch nicht in der Datenbank gibt ?

Was soll passieren wenn es den Artikel schon gibt ?

Aus welcher Tabelle soll der Artikel gelöscht werden ?

In "pfad" hast Du den Dateinamen mit Pfad und in "file" hast Du die Extension.

Schreib besser so :


string file = openFileDialog.FileName;
string ext = Path.GetExtension(file);
if (ext == ".txt")
    ...

Grüße Bernd

11.12.2022 - 18:22 Uhr

Bei Stackoverflow finde ich zu dem Fehler :

I resolved it by using nuget package manager to install Mysql.Data and also installed System.Security.Permissions. This solved my problem.

Grüße Bernd

06.12.2022 - 20:41 Uhr

Also ich habe es so gemacht und wenn ich es Debugge und in einer textBox ausgebe funktioniert es auch. Gibt es Verbesserungsvorschläge?

Ja, das passt so.

Ich würde es so machen :


private bool PruefeSchnapszahl()
{
    string zahl = Int32.Parse(textBox1.Text).ToString();
    if (zahl.Length < 2) return false;
    for (int i = 1; i < zahl.Length; i++) if (zahl[i] != zahl[0]) return false;
    return true;
}

Grüße Bernd

06.12.2022 - 19:18 Uhr

SSH ist dafür gedacht. Skript ausführen :


string host = "...";
string cmd = "tar -cvzpf /home/backup/" + dir + @"_$(date +\%F_\%H\%M\%S).tar.gz www/" + dir + "/";
ConnectionInfo info = new ConnectionInfo(host, 22, "...", new AuthenticationMethod[] { new PasswordAuthenticationMethod("...", "...") });
SshClient client = new SshClient(info);
try
{
	client.Connect();
	Thread.Sleep(1000);
	while (!client.IsConnected) { }
	var result = client.RunCommand(cmd);
}
catch (Exception ex)
{
	Error("Fehler beim Verbinden mit der SSH Shell :\r\n\r\n" + ex.Message);
}
client.Disconnect();
client.Dispose();

Grüße Bernd

06.12.2022 - 09:58 Uhr

Eingebettete Resource lesen :


string file = "test.json";
using (StreamReader s = new StreamReader(Assembly.GetExecutingAssembly().GetManifestResourceStream("XamarinForms.LocationService.Resources." + file)))
{
	return s.ReadToEnd();
}
return "";

Grüße Bernd

05.12.2022 - 21:48 Uhr

Ich benutze File.ReadAllText(file) mit using System.IO, läuft einwandfrei.

Visual Studio 2019 mit Xamarin.Forms Version 5.0.0.

Da stimmt irgendwas nicht, denn das sollte auf Anhieb funktionieren.

Grüße Bernd

30.11.2022 - 10:56 Uhr

-> BerndFfm: nein, not supported

In Xamarin.Forms wird es leider auch nicht supported so wie ich es gebraucht hätte.

Schnell ein Bubble Sort geschrieben, das klappt gut :


private void SortDevices(ref List<ListDevice> devices)
{
	if (devices.Count < 2) return;
	for (int j = 0; j < devices.Count - 1; j++)
		for (int k = j + 1; k < devices.Count; k++)
			if (IsGreater(devices[k], devices[j]))
			{
				ListDevice tdev = devices[j];
				devices[j] = devices[k];
				devices[k] = tdev;
				j = 0;
			}
}

Grüße Bernd

29.11.2022 - 20:30 Uhr

Kannst Du Deine Liste nicht mit List<T>.Sort() sortieren ?

Grüße Bernd

22.11.2022 - 09:41 Uhr

Ich benutze in einfachen Projekten auch immer eine Json-Datei für Settings.

Das hat viele Vorteile : Du musst dich nicht um Datentypen und -wandlung kümmern, man kann beliebig Einträge hinzufügen oder weglassen. Nur nachträglich keine Typen ändern.

Bei portablen Apps kann man die Json-Datei auch auf dem USB-Stick speichern.

Man kann auch einfach mehrere Settings anlegen und zwischen verschiedenen Settings umschalten.

Grüße Bernd

21.11.2022 - 11:48 Uhr

Ja, dafür ist der Name-Tag nicht gedacht gewesen.

Wir kennen zuwenig Anforderungen des Thread Erstellers um mehr Tipps geben zu können.

Ist es eine variable Anzahl ? Oder eine feste Anzahl ? Größer 10 ?

In WPF ist eine Liste mit Labels und Data Binding auf jeden Fall die bessere Lösung :


            <ListView x:Name="lvi_devices" ItemTapped="Listview_ItemTapped" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand">
                <ListView.Header>
                    <Grid ColumnDefinitions="1*" HorizontalOptions="FillAndExpand">
                        <Label Text="Name" FontSize="13" Grid.Column="0"></Label>
                    </Grid>
                </ListView.Header>
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <ViewCell>
                            <Grid ColumnDefinitions="1*" HorizontalOptions="FillAndExpand">
                                <Label Text="{Binding name}" FontSize="17" Grid.Column="0"></Label>
                            </Grid>
                        </ViewCell>
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>

Grüße Bernd

21.11.2022 - 08:43 Uhr

Wenn Du die Labels im Code anlegst nach Bedarf dann kannst Du sie als Array anlegen und über Index ansprechen :


Label[] lbl = new Label[100];
...
lbl[i].Content = subs[i];

Wenn Du sie per Hand angelegt hast dann kannst Du nicht per Index ansprechen, aber andersrum geht es :


foreach (var child in ...Children)
    for(int i = 0; i < 100; i++)
    {
         if (child.Name = "lbl_"+ i.Tostring()) child.Content = subs[i];
    }

Wäre nicht eine Tabelle oder Grid besser für die Darstellung vieler Zahlen ?

Grüße Bernd

20.11.2022 - 16:41 Uhr

Ich benutze Android.Forms Version 5.0.0.2012+671 vom 2. Februar 2021.

Wenn es funktioniert ist es mir egal ob es deprecated ist.

Grüße Bernd

19.11.2022 - 23:32 Uhr

Hab im Android Projekt in der csproj-Datei den Eintrag

<DebugType>portable</DebugType>

geändert in

<DebugType>full</DebugType>

Jetzt wird die Stelle angezeigt wo der Fehler auftritt.

Schade dass das nicht die Standard Einstellung ist und auch nirgendwo dokumentiert ist.

Grüße Bernd

19.11.2022 - 15:50 Uhr

Ich habe Version 16.11.21, also die aktuellste Version.

Grüße Bernd

19.11.2022 - 13:07 Uhr

Der Fehler war in meinem C# Code.

Diese Anzeige bekomme ich bei jedem Fehler.

Breakpoint setzen und Debugging funktioniert.

Grüße Bernd

18.11.2022 - 20:25 Uhr

Leider zeigt mir das Visual Studio bei einem Fehler nie die Zeile an wo der Fehler auftritt. Das macht die Fehlersuche immer sehr schwierig.

Folgendes wird bei einem Fehler im Debug Mode angezeigt :

Fehlermeldung:

Die Anwendung befindet sich im Haltemodus

Ihre App wurde angehalten, aber es gibt keinen anzuzeigenden Code, da alle Threads externen Code ausgeführt haben (normalerweise System- oder Frameworkcode).

Details anzeigen :


Microsoft Visual Studio

EXCEPTION: Mono.Debugger.Soft.VMNotSuspendedException: The vm is not suspended.

bei Mono.Debugger.Soft.VirtualMachine.ErrorHandler(Object sender, ErrorHandlerEventArgs args) in C:\A\1\5\s\External\debugger-libs\Mono.Debugger.Soft\Mono.Debugger.Soft\VirtualMachine.cs:Zeile 367.

bei Mono.Debugger.Soft.Connection.SendReceive(CommandSet command_set, Int32 command, PacketWriter packet) in C:\A\1\5\s\External\debugger-libs\Mono.Debugger.Soft\Mono.Debugger.Soft\Connection.cs:Zeile 1806.

bei Mono.Debugger.Soft.VirtualMachine.Resume() in C:\A\1\5\s\External\debugger-libs\Mono.Debugger.Soft\Mono.Debugger.Soft\VirtualMachine.cs:Zeile 139.

bei Mono.Debugging.Soft.SoftDebuggerSession.HandleEventSet(EventSet es) in C:\A\1\5\s\External\debugger-libs\Mono.Debugging.Soft\SoftDebuggerSession.cs:Zeile 1871.

bei Mono.Debugging.Soft.SoftDebuggerSession.EventHandler() in C:\A\1\5\s\External\debugger-libs\Mono.Debugging.Soft\SoftDebuggerSession.cs:Zeile 1772.


OK

Wie kann man erreichen dass beim VS 2019 bei Xamarin Forms die Zeile angezeigt wird wo der Fehler auftritt ?

Grüße Bernd

18.11.2022 - 10:22 Uhr

Ein virtuelles ListView kann man nach Bedarf nachladen, so dauert die Anzeige von mehreren Millionen Datensätzen nur 0,2 Sekunden. Glaubt man.

Ich habe immer ein Suchfeld zum Eingrenzen und dann auf Knopfdruck ein ListView.

Grüße Bernd

17.11.2022 - 10:06 Uhr

Das muss natürlich dann so heißen :


txtWorkDays.Text = DaysAmount(dateStart, dateEnd, false).ToString();
txtHolidayDays.Text = DaysAmount(dateStart, dateEnd, true).ToString();

Vergiss bitte meinen Code von 13:05 Uhr, nimm lieber den vorherigen.

Sinn das alles in eine Methode zu packen macht es dann wenn es mal mehrere Arten von errechneten Werten geben soll.

Grüße Bernd

16.11.2022 - 13:05 Uhr

Sollte auch so gehen :


public int DaysAmount(DateTime dtpStart, DateTime dtpEnd, bool holidays)
{
    int days = 0;
    List<DateTime> holidaylist = HolidayDays();
    for (DateTime date = dtpStart; date ≤ dtpEnd; date = date.AddDays(1))
        if (!holidays && dtpStart.DayOfWeek != DayOfWeek.Sunday && !holidaylist.Contains(date)) days++;
        else days++;
    return days;
}

private List<DateTime> HolidayDays()
{
    List<DateTime> holidaylist = ...
    return holidaylist;
}

Grüße Bernd

16.11.2022 - 10:36 Uhr

Wenn Du nur eine Methode haben willst, die dann aber zweimal aufgerufen wird geht das auch so :



int wdays = DaysAmount(dtpStart, dtpEnd, false);
int hdays = DaysAmount(dtpStart, dtpEnd, true);

...

public int DaysAmount(DateTime dtpStart, DateTime dtpEnd, bool holidays)
{
    int days = 0;
    List<DateTime> holidaylist = HolidayDays();
    for (DateTime date = dtpStart; date ≤ dtpEnd; date = date.AddDays(1))
    {
        if (holidays && (dtpStart.DayOfWeek == DayOfWeek.Sunday || holidaylist.Contains(date))) days++;
        if (!holidays && dtpStart.DayOfWeek != DayOfWeek.Sunday && !holidaylist.Contains(date)) days++;
    }
    return days;
}

Sehe ich aber keinen so großen Vorteil.

Grüße Bernd

15.11.2022 - 12:06 Uhr

Auch in der Methode TestAmount stimmt die Logik nicht. Du gibst immer eine 1 zurück. Du willst aber sicher die Anzahl der Tage wissen.

Das könnte so aussehen :


public int HolidaysAmount(DateTime dtpStart, DateTime dtpEnd)
{
    int hdays = 0;
    List<DateTime> holiday = HolidayDays();
    for (DateTime date = dtpStart; date ≤ dtpEnd; date = date.AddDays(1))
        if (dtpStart.DayOfWeek == DayOfWeek.Sunday || holiday.Contains(date))
            hdays++;
    return hdays;
}

Du brauchst 2 Methoden weil Du ja 2 Werte berechnen willst. Oder Du nutzt eine Methode und übergibst die Werte per ref.

Grüße Bernd

13.11.2022 - 22:36 Uhr

Die kostenlose Variante ist sehr holprig, der kostenpflichtige Account ist da viel besser.

Deployment muss man auf dem Mac machen da auf einem Windows Rechner aus Sicherheitsgründen seit einiger Zeit keine private Key mehr gespeichert werden. Leider ist das kaum dokumentiert.

Das iPhone muss am Mac angeschlossen sein, zumindestens beim M1 Mac. Der Emulator auf dem Windows Rechner bringt leider nur einen schwarzen Bildschirm.

Ich freue mich dass mit MAUI das nun alles besser unterstützt wird, getestet habe ich es noch nicht.

Grüße Bernd

08.11.2022 - 20:31 Uhr

Um 22:00 Uhr kommt .NET MAUI !

31.10.2022 - 22:47 Uhr

Zumindestens bei Rechnungen gibt es in Deutschland genaue Vorschriften, und da muss nach jeden Zwischenschritt, der ausgegeben wird, gerundet werden.

Sonst erfüllt man die nicht Vorgaben für Rechnungen gemäß Umsatzsteuergesetz und den Grundsätzen der ordnungsgemäßen Buchführung.

Grüße Bernd

30.10.2022 - 21:23 Uhr

Kaufmännische Runden erfolgt, wenn man alles berechnet hat - am Ende.

Es wird nach jedem Zwischenschritt der ein Ergebnis ausgibt gerundet.

Sonst könnte man die Rechenschritte nicht nachvollziehen.

Grüße Bernd

20.10.2022 - 13:04 Uhr

Selber einen Parser bauen, dazu brauchst Du Split(), SubString() und Double.Parse().

Oder Regex benutzen.

Grüße Bernd

15.10.2022 - 10:41 Uhr

Danke !!!

Das wars, jetzt läuft die App bei mir wieder stabil. Bei einigen wenigen Leuten kommt es aber immer wieder zu Abstürzen.

Ich werde jetzt mal das Update mit dieser Fehlermeldung verteilen und schauen ob ich was finde.

Danke nochmal Grüße Bernd

14.10.2022 - 19:00 Uhr

Toll !

Jetzt hab ich einen Fehler der absolut unregelmäßig auftritt. Und ich hab keinen Plan wo.

Wie findet man den jetzt ?

Grüße Bernd

14.10.2022 - 11:58 Uhr

Leider funktioniert das nicht.

Merkwürdig ist dass das Debuggen funktioniert mit Anzeige des Source Code.

Die App läuft auf einem externen Device über USB oder WLAN angebunden. Ein Samsung Galaxy S6 Tablet.

Den Methodennamen in der der Fehler aufgetreten ist kennt das StackTrace, nur die Zeilennummer nicht.

Grüße Bernd

14.10.2022 - 09:14 Uhr

Hallo,

meine Xamarin Forms App läuft inzwischen auf vielen Handys und Tablets. Auch sehr stabil und zuverlässig. immer noch VS 2019.

Leider ist es bei Auftreten eines Fehlers so dass die App einfach abstürzt, und natürlich weiß man nicht wieso.

Ich habe jetzt ein sehr einfaches Error Handling eingebaut dass alle Fehler abfängt, in eine Datei schreibt und beim nächsten Start anzeigt.

Jetzt sehe ich zwar den Fehler und den Stack, aber leider nicht die Zeilennummer wo der Fehler aufgetreten ist. Auch wenn ich die PDB-Datei mitliefere oder einbette ist das so.


protected override void OnCreate(Bundle savedInstanceState)
{
    ...
    System.AppDomain.CurrentDomain.UnhandledException += CurrentDomainOnUnhandledException;
    System.Threading.Tasks.TaskScheduler.UnobservedTaskException += TaskSchedulerOnUnobservedTaskException;
    ...
}

private void CurrentDomainOnUnhandledException(object sender, System.UnhandledExceptionEventArgs e)
{
    UnhandledException(sender, (System.Exception)e.ExceptionObject);
}

private void TaskSchedulerOnUnobservedTaskException(object sender, UnobservedTaskExceptionEventArgs e)
{
    UnhandledException(sender, e.Exception); 
}

private void UnhandledException(object sender, System.Exception ex)
{
    string error = ex.Message;
    if (ex.InnerException != null) error += "\r\n" + ex.InnerException.Message;
    error += "\r\n\r\nStack :" + ex.StackTrace;
    if (error.Length > 500) error = error.Substring(0, 500) + " ...";
    File.WriteAllText(Path.Combine(FileSystem.AppDataDirectory, "Errorlog.txt"), error);
}

Wie kann ich die genaue Stelle herausbekommen wo der Fehler aufgetreten ist ?

  1. Frage : Im Debug Mode ist es auch so dass beim Auftreten eines Fehlers die Stelle im Code nicht angezeigt wird wo der Fehler aufgetreten ist. Ist das bei Xamarin Forms immer so ?
    Sehr unpraktisch.

Grüße Bernd

08.10.2022 - 19:38 Uhr

Den Signal Offline Messenger gibt es nicht mehr im Play Store. Nur als APK zum Download.

Kann man die gefahrlos installieren ?

Die anderen Messenger habe ich getestet, klappt leider nicht mit denen.

Grüße Bernd

08.10.2022 - 09:04 Uhr

Das Handy muss im Entwicklermode sein und über USB angeschlossen sein. USB Debugging sollte eingeschaltet sein.

Dann kann man es in VS als Ziel angeben, mit F5 wird die App dann direkt auf dem Handy geöffnet.

Mit ADB kann man es auch über WLAN ansprechen ohne USB.


"C:\Program Files (x86)\Android\android-sdk\platform-tools\adb.exe" connect 212.223.10.34:5555

Grüße Bernd

07.10.2022 - 22:10 Uhr

Hallo,

ich suche einen Offline Messenger der über WLAN funktioniert und der Dateien übertragen kann. Ohne Verbindung zum Internet.

Getestet habe ich : Bridgefy, Bridgefy Alert, Briar, OfflineChat.

Leider hat keiner funktioniert.

Erstmal Android, besser wäre Android und iOS.

Grüße Bernd

PS.: Oder muss ich sowas selber programmieren ?

07.10.2022 - 09:31 Uhr

Bei 60 Mio. Bildern mit ca. 2-3 MB pro Bild, mal schlecht geschätzt, reden wir von 100+ GB.
Aber selbst das sollte keine Wochen dauern, eher Stunden bis ggf. mal 1 Tag wäre vorstellbar.

Auf eine SSD im gleichen Rechner hat es 2 Wochen gedauert, auf die SSD eines anderen Rechners 4 Wochen. Bei 500 GB Daten.
Platten und Netzwerk sind in Ordnung.

Bei vielen kleinen Dateien ist es eben sehr uneffektiv.

Ich habe auch andere Dateisysteme ausprobiert, die haben bei 20 Millionen Dateien aufgehört. Es ging nur mit NTFS.

Grüße Bernd

06.10.2022 - 16:40 Uhr

Das Kopieren von Dateien ist immer langsam.

Ich habe Offline Landkarten erstellt und wenn ich die einzelnen Kacheln auf eine neue Platte kopieren muss dauert das Wochen (60 Millionen Dateien).

Kommandozeilentools waren nicht schneller.

Grüße Bernd