Laden...

Forenbeiträge von Nierewa Ingesamt 15 Beiträge

16.09.2019 - 13:44 Uhr

Danke an alle.
Ich hab es hinbekommen.

Mithilfe des Visual Studio Installer Project habe ich die Dateien hinzugefügt und gleich noch ein uninstall eingearbeitet. Es scheint nun alles so zu funktioniert wie es soll.

Vielen dank nochmal 😁

16.09.2019 - 13:12 Uhr

Ok.
Ich hab herausgefunden was nicht stimmt. Es fehlt wirklich eine Datei.
Kopiere ich diese in den Releaseordner funktioniert alles.

Wie kann ich diese zum Setup hinzufügen bzw. zum Release?

16.09.2019 - 13:01 Uhr

Ok. Ich hab auf Release gestellt und habe jetzt zwei Datein im Ordner.
Shippment-FE.exe und Shippment-FE.exe.config
Leider besteht das Problem weiterhin. Der Splashscreen wird angezeigt, dann das Formular und nach 2 Sekunden ist Schluß.

Zwischenzeitlich habe in mir mithilfe des Visual Studio Installer Project ein MSI-Paket erstellt.
Nach der Installation habe ich ebenfalls diese zwei Dateien im Programmordner.

Zu Testzwecken habe ich in einer VM Windows 7 laufen und hier bekomme ich die Fehlermeldung angezeigt:

Problemsignatur:
  Problemereignisname:	CLR20r3
  Problemsignatur 01:	Shippment-FE.exe
  Problemsignatur 02:	1.0.7198.22858
  Problemsignatur 03:	5d7f66f6
  Problemsignatur 04:	mscorlib
  Problemsignatur 05:	4.6.1055.0
  Problemsignatur 06:	563c0eac
  Problemsignatur 07:	157f
  Problemsignatur 08:	ca
  Problemsignatur 09:	System.IO.FileNotFoundException
  Betriebsystemversion:	6.1.7601.2.1.0.256.48
  Gebietsschema-ID:	1031
  Zusatzinformation 1:	0a9e
  Zusatzinformation 2:	0a9e372d3b4ad19135b953a78882e789
  Zusatzinformation 3:	0a9e
  Zusatzinformation 4:	0a9e372d3b4ad19135b953a78882e789
16.09.2019 - 12:49 Uhr

Du musst erst das Release-Build erstellen, damit auch was in den Ordner-kommt 😉

Hmm. Ist wahrscheinlich ne doofe Frage, aber wie mach ich das?

16.09.2019 - 11:45 Uhr

Im Release Ordner ist nix drin, nur im Debug Ordner.

Wo kommt denn der Text für das Eingabeformular her?

Das sind nur Labels. Und auf den Buttons steht auch kein Text.

Wenn ich bei der Projektmappe auf Eigenschaften klicke gibt es den Punkt veröffentlichen.
Wenn ich das ausführe bekomme ich zwei Fehlermeldungen:

  1. Meldung:


Die Datei "z:\Nutzer\Documents\Visual Studio 2017\Zuarbeit\Zuarbeit\Zuarbeit_TemporaryKey.pfx" ist bereits vorhanden. Möchten Sie die Datei überschreiben?
---------------------------
Ja   Nein   
---------------------------

  1. Meldung:

Dem Projekt konnte kein Standardschlüssel hinzugefügt werden. Fügen Sie über die Signierungsseite einen Schlüssel hinzu, bevor Sie die Veröffentlichung wiederholen.
---------------------------
OK   Hilfe   
---------------------------

Ich hab mal unter "Signierung" nachgesehen. Hier ist nichts aktiviert.

16.09.2019 - 11:30 Uhr

Hallo,

ich bin mit meinem Projekt fertig 😁
Es ist eine Windows Anwendung mit Splashscreen, TrayIcon und einem Formular in der der Benutzer Einstellungen machen kann.

Funktioniert super wenn ich die Anwendung im Visual Studio starte.
Im Projektordner unter Projektname/bin/Debug finde ich die exe-Datei der Anwendung.

Gebe ich diese allerdings weiter bzw. starte sie, erscheint der Splashscreen, dann das Eingabeformular
ohne Text und wird nach 2 Sekunden geschlossen.

Woran könnte das liegen?
Oder muß ich die Anwendung anders erstellen um sie weitergeben zu können?

09.09.2019 - 17:34 Uhr

Zuerst mal danke an alle.

ich habe das so geändert

public static void Main (string [] astrArg){

                      if (String.IsNullOrEmpty(sourcePath)) { new MainForm().Show(); }
                      else
                      {

                          Timer t1 = new Timer(); // Timer anlegen
                          t1.Interval = Int32.Parse(testIntervall + 1); // Intervall festlegen, hier 100 ms
                          t1.Tick += new EventHandler(t1_Tick); // Eventhandler ezeugen der beim Timerablauf aufgerufen wird
                          t1.Start(); // Timer starten 
                      }

Und es erscheint das Formular, wo ich die EIngaben machen kann.

Hier prüfe ich beim Speichern ob die erforderlichen Angaben gemacht wurden.Natürlich wird die if-else Anweisung dann nicht mehr abgefragt und es passiert nix mehr. Deshalb starte ich die Anwenung einfach über Application.Restart(); neu.

private void btn_save_Click(object sender, EventArgs e)
        {
            
                if (textBox1.Text =="") { MessageBox.Show("Bitte überprüfen Sie Ihre Eingaben für das Quellverzeichnis. ");  }
                else if (textBox2.Text =="") { MessageBox.Show("Bitte überprüfen Sie Ihre Eingaben für das Zielverzeichnis. "); }
                else if (textBox3.Text =="") { MessageBox.Show("Bitte überprüfen Sie Ihre Eingaben für das zu ersetzende Zeichen."); }
                else if (textBox4.Text == "") { MessageBox.Show("Bitte überprüfen Sie Ihre Eingaben für das zu schreibende Zeichen."); }
                else {
                    Properties.Settings.Default.quellpfad = textBox1.Text;
                    Properties.Settings.Default.zielpfad = textBox2.Text;
                    Properties.Settings.Default.auswahlzeichen = textBox3.Text;
                    Properties.Settings.Default.ersatzzeichen = textBox4.Text;
                    Properties.Settings.Default.Save();
                    Application.Restart();
                }
            
        }

Würde es auch besser gehen? Also das nach dem Speichern die If-Else Abfrage nochmal ausgeführt wird ohne neu zu starten? Und wenn ja, wie?

Hinzugefügt um 17:50Uhr:
Ich habe gemerkt das nach dem Application.Restart() das Formular aufgeht und ich nochmal alle Angaben machen muß. Nach dem errneuten Speichern funktioniert es wie gewünscht. Kann mir jemand sagen woran das liegt? Ich finde den Fehler nicht.

09.09.2019 - 14:01 Uhr

Hallo
Danke erst mal für die schnelle Antwort.

Du musst natürlich vorher prüfen, ob der Pfad (sourcePath Variable) gültig ist.

Das weiß ich. Müßte ja nur nachschauen ob der Pfad leer ist und wenn ja, das Formular mir den Einstellungen öffnen. Aber ich weiß nicht wo, also an welcher stelle im Code.
Egal wo ich das mache, der weitere Quellcode wird abgearbeitet und es kommt der Fehler.

Ich habe probiert eine Do-While Schleife zu nutzen, aber der Quellcode wird weiter ausgeführt und ich bekomme diese Fehlermeldung das der Pfad ungültig ist.

Wundert euch nicht, wenn es zum Teil sehr heftige Gegenreaktionen gibt, falls ihr doch nach fertigen Lösungen fragt oder anderweitig der Eindruck entsteht, dass ihr uns kostenlos für eure Aufgaben einspannen wollt.

Das verstehe ich, aber das möchte ich ja auch gar nicht. Deshalb hab ich geschrieben oder 😁

Ich schau mir den Link natürlich an.

09.09.2019 - 13:45 Uhr

Ich habe ein Projekt, bei dem in allen Textdateien in einem Verzeichnis Zeichen ersetzt werden und die Datei dann in einem anderen Verzeichnis gespeichert wird. Das wird mittels Timer immer wieder ausgeführt.

Der Nutzer kann über ein Formular Quell- und Zielverzeichnis, das zu ersetzende und das neue Zeichen auswählen, sowie das Überprüfungsintervall einstellen. Das ganze wird in einer Konfigurationsdatei gespeichert. So weit so gut.

Ich habe jetzt den Quellcodse angepaßt, das die Variablen aus der Konfigurationsdatei verwendet werden. Jetzt bekomme ich für meinen Aufruf foreach (var fn in Directory.GetFiles(@sourcePath, "*.txt")) folgende Fehlermeldung

Fehlermeldung:
System.ArgumentException
HResult=0x80070057
Nachricht = Der Pfad hat ein ungültiges Format.
Quelle = mscorlib
Stapelüberwachung:
bei System.IO.Path.LegacyNormalizePath(String path, Boolean fullCheck, Int32 maxPathLength, Boolean expandShortPaths)
bei System.IO.Path.NormalizePath(String path, Boolean fullCheck, Int32 maxPathLength, Boolean expandShortPaths)
bei System.IO.Path.GetFullPathInternal(String path)
bei System.IO.FileSystemEnumerableIterator1..ctor(String path, String originalUserPath, String searchPattern, SearchOption searchOption, SearchResultHandler1 resultHandler, Boolean checkHost)
bei System.IO.Directory.GetFiles(String path, String searchPattern)
bei Zuarbeit.Program.MyNotifyIconApplication.t1_Tick(Object sender, EventArgs e) in z:\Nurtzer\Documents\Visual Studio 2017\Zuarbeit\Zuarbeit\Program.cs: Zeile58
bei System.Windows.Forms.Timer.OnTick(EventArgs e)
bei System.Windows.Forms.Timer.TimerNativeWindow.WndProc(Message& m)
bei System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
bei System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
bei System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
bei System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
bei System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
bei System.Windows.Forms.Application.Run()
bei Zuarbeit.Program.MyNotifyIconApplication.Main(String[] astrArg) in z:\Nutzer\Documents\Visual Studio 2017\Zuarbeit\Zuarbeit\Program.cs: Zeile126

Ich denke mal das liegt daran, das die Variable sourcePath leer ist.

Ich müßte also prüfen ob die Variale leer ist und falls ja, zuerst das Formular mit den Einstellungen aufrufen und diese setzen lassen, bevor etwas anderes passiert.

Nur weiß ich nicht an welcher Stelle im quellcode ich das tun muß. Ich hab schon einiges probiert, bekomme aber nur noch mehr Fehlermeldungen. Kann mir jemand sagen wo ich die Prüfung einfügen muß? Oder den Quelltext für mich korrigieren und mir kurz erklären was und warum getan wurde?

Die Prüfung würde ich übrigens so machen:

 if (sourcePath == "") { MessageBox.Show("Bitte über das TRay-Icon die einstellungen aufrufen und die nötigen Eingaben setzen. "); }
                else if (targetPath == "") { MessageBox.Show("Bitte über das TRay-Icon die einstellungen aufrufen und die nötigen Eingaben setzen. "); }
                else if (selectedCharacter == "") { MessageBox.Show("Bitte über das TRay-Icon die einstellungen aufrufen und die nötigen Eingaben setzen."); }
                else if (replacementCharacter == "") { MessageBox.Show("Bitte über das TRay-Icon die einstellungen aufrufen und die nötigen Eingaben setzen."); }
                else if (testIntervall == "") { MessageBox.Show("Bitte über das TRay-Icon die einstellungen aufrufen und die nötigen Eingaben setzen."); }

Hier mal meine gesamte Program.cs:

using System;
using System.Windows.Forms;
using System.IO;
using System.Drawing;
using System.Collections.Specialized;
using System.Configuration;
using System.Text;




namespace Zuarbeit
{
    /// <summary>
    /// Class with program entry point.
    /// </summary>
    internal sealed class Program
    {
        /// <summary>
        /// Program entry point.
        /// </summary>  


        //*****************************************************************************

        static class MyNotifyIconApplication
{
            public static string fileName = "";
            public static string sourcePath = Properties.Settings.Default.quellpfad;
            public static string targetPath = Properties.Settings.Default.zielpfad;
            public static string selectedCharacter = Properties.Settings.Default.auswahlzeichen;
            public static string replacementCharacter = Properties.Settings.Default.ersatzzeichen;
            public static string testIntervall = Properties.Settings.Default.intervall;

            // Use Path class to manipulate file and directory paths.
            public static string sourceFile = System.IO.Path.Combine(sourcePath, fileName);
            public static string destFile = System.IO.Path.Combine(targetPath, fileName);

            private static void t1_Tick(object sender, EventArgs e)  
{
              

    foreach (var fn in Directory.GetFiles(@sourcePath, "*.txt")) {

               // Eine Backupdatei von der Quelldatei anlegen
               fileName = System.IO.Path.GetFileNameWithoutExtension(fn);
               destFile = System.IO.Path.Combine(sourcePath, fileName+".bak");
               System.IO.File.Copy(fn, destFile, true);

               // in der Textdatei alle # mit | ersetzen.
               string text = File.ReadAllText(fn);
               text = text.Replace(selectedCharacter, replacementCharacter);
               File.WriteAllText(fn, text);



               // die Datei in den Zielordner kopieren und danach löschen
               fileName = System.IO.Path.GetFileName(fn);
               destFile = System.IO.Path.Combine(targetPath, fileName);
               System.IO.File.Copy(fn, destFile, true);
               System.IO.File.Delete(fn);
              }
              }
   private static NotifyIcon  notico;


            [STAThread]
            //==========================================================================
            public static void Main (string [] astrArg)
   {
                new MainForm().Show();
                

                   Timer t1 = new Timer(); // Timer anlegen
                   t1.Interval = Int32.Parse(testIntervall+1); // Intervall festlegen, hier 100 ms
                   t1.Tick+=new EventHandler(t1_Tick); // Eventhandler ezeugen der beim Timerablauf aufgerufen wird
                   t1.Start(); // Timer starten  

   

                      ContextMenu cm;
                      MenuItem    miCurr;
                      int         iIndex = 0;

                      // Kontextmenü erzeugen
                      cm = new ContextMenu ();

                      // Kontextmenüeinträge erzeugen
                      miCurr = new MenuItem ();
                      miCurr.Index = iIndex++;
                      miCurr.Text = "&Einstellungen";           // Eigenen Text einsetzen
                      miCurr.Click += new System.EventHandler (Action1Click);
                      cm.MenuItems.Add (miCurr);

                      // Kontextmenüeinträge erzeugen
                      miCurr = new MenuItem ();
                      miCurr.Index = iIndex++;
                      miCurr.Text = "&Beenden";
                      miCurr.Click += new System.EventHandler (ExitClick);
                      cm.MenuItems.Add (miCurr);

                      // NotifyIcon selbst erzeugen
                      notico = new NotifyIcon ();
                      notico.Icon = new Icon("smile.ico"); // Eigenes Icon einsetzen
                      notico.Text = "Doppelklick mich!";   // Eigenen Text einsetzen
                      notico.Visible = true;
                      notico.ContextMenu = cm;
                      notico.DoubleClick += new EventHandler (NotifyIconDoubleClick);

                // Ohne Appplication.Run geht es nicht
                Application.Run ();
                    
                
            }

   //==========================================================================
   private static void ExitClick (Object sender, EventArgs e)
   {
      notico.Dispose ();
      Application.Exit ();
   }

   //==========================================================================
   private static void Action1Click (Object sender, EventArgs e)
   {
      // nur als Beispiel:
      new MainForm().Show();
   }

   //==========================================================================
   private static void NotifyIconDoubleClick (Object sender, EventArgs e)
   {
      // Was immer du willst
      new MainForm().Show();
   }


}
    }
}
05.09.2019 - 22:22 Uhr

Danke für die Links. Werd ich mich mal einlesen =)

@MarsStein:
Sorry, wenn ich weitere Fragen habe öfnne ich einen neuen Thread

05.09.2019 - 00:16 Uhr

Als nächsten Schritt wollte ich eine Konfiguratiosdatei benutzen. Der Nutzer soll den Quell- und Zielpfad selbst bestimmen können... ist das zu hoch für mich und Utopie?

Oder zeigt mir jemand wie es geht?

Das Formular dazu hab ich schon entsprechend erstellt...

04.09.2019 - 12:11 Uhr

Es sieht jetzt so aus und funktioniert:

static class MyNotifyIconApplication
{
   
private static void t1_Tick(object sender, EventArgs e)  
{
              string fileName = "";
             ...
              string destFile = System.IO.Path.Combine(targetPath, fileName);

    foreach (var fn in Directory.GetFiles(@"Z:\DHL", "*.txt")) {

                   ...
              }
 }
   private static NotifyIcon  notico;
     //==========================================================================
   public static void Main (string [] astrArg)
   {

   Timer t1 = new Timer(); // Timer anlegen
   t1.Interval = 10000; // Intervall festlegen, hier 100 ms
   t1.Tick+=new EventHandler(t1_Tick); // Eventhandler ezeugen der beim Timerablauf aufgerufen wird
   t1.Start(); // Timer starten

...

Ich hab die anderen Eventhandler angesehen, da stand immer private static ... auch hingeschrieben und es geht. Warum?

04.09.2019 - 10:16 Uhr

Ich erhalte insgesamt 37 Fehler, die ich nicht alle aufführen kann.

Dein Code kann so halt einfach garnicht kompilieren. Du hast den Eventhandler t1_Tick mitten in die Main Methode gepackt.

Könntest Du mir sagen wo das dann hinmuß und warum?

Ich weiß das es ohne Grundlagen nicht geht und es ist wohl auch ein Fehler gleich mit c# anzufangen wenn man noch nie programmiert hat. doch leider stehe ich unter Zeitdruck und habe nicht soviel Zeit 🙁

using System;
using System.Windows.Forms;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Drawing;



namespace Zuarbeit
{
    /// <summary>
    /// Class with program entry point.
    /// </summary>
    internal sealed class Program
    {
        /// <summary>
        /// Program entry point.
        /// </summary>  


//*****************************************************************************

void t1_Tick(object sender, EventArgs e)
            

{

	
        string fileName = "";
              string sourcePath = @"Z:\DHL\";
              string targetPath =  @"Z:\DHL\Versand\";

              // Use Path class to manipulate file and directory paths.
              string sourceFile = System.IO.Path.Combine(sourcePath, fileName);
              string destFile = System.IO.Path.Combine(targetPath, fileName);

    foreach (var fn in Directory.GetFiles(@"Z:\DHL", "*.txt")) {

                     // Eine Backupdatei von der Quelldatei anlegen
               fileName = System.IO.Path.GetFileNameWithoutExtension(fn);
               destFile = System.IO.Path.Combine(sourcePath, fileName+".bak");
               System.IO.File.Copy(fn, destFile, true);

               // in der Textdatei alle # mit | ersetzen.
               string text = File.ReadAllText(fn);
               text = text.Replace("#", "|");
               File.WriteAllText(fn, text);



               // die Datei in den Zielordner kopieren und danach löschen
               fileName = System.IO.Path.GetFileName(fn);
               destFile = System.IO.Path.Combine(targetPath, fileName);
               System.IO.File.Copy(fn, destFile, true);
               System.IO.File.Delete(fn);
              }
              }



static class MyNotifyIconApplication
{
   private static NotifyIcon  notico;
   


    //==========================================================================
   public static void Main (string [] astrArg)
   {

   Timer t1 = new Timer(); // Timer anlegen
   t1.Interval = 100; // Intervall festlegen, hier 100 ms
   t1.Tick+=new EventHandler(t1_Tick); // Eventhandler ezeugen der beim Timerablauf aufgerufen wird
   t1.Start(); // Timer starten  

	


         ContextMenu cm;
      MenuItem    miCurr;
      int         iIndex = 0;

      // Kontextmenü erzeugen
      cm = new ContextMenu ();

      // Kontextmenüeinträge erzeugen
      miCurr = new MenuItem ();
      miCurr.Index = iIndex++;
      miCurr.Text = "&Aktion 1";           // Eigenen Text einsetzen
      miCurr.Click += new System.EventHandler (Action1Click);
      cm.MenuItems.Add (miCurr);

      // Kontextmenüeinträge erzeugen
      miCurr = new MenuItem ();
      miCurr.Index = iIndex++;
      miCurr.Text = "&Beenden";
      miCurr.Click += new System.EventHandler (ExitClick);
      cm.MenuItems.Add (miCurr);

      // NotifyIcon selbst erzeugen
      notico = new NotifyIcon ();
      notico.Icon = new Icon("smile.ico"); // Eigenes Icon einsetzen
      notico.Text = "Doppelklick mich!";   // Eigenen Text einsetzen
      notico.Visible = true;
      notico.ContextMenu = cm;
      notico.DoubleClick += new EventHandler (NotifyIconDoubleClick);

      // Ohne Appplication.Run geht es nicht
      Application.Run ();
   }

   //==========================================================================
   private static void ExitClick (Object sender, EventArgs e)
   {
      notico.Dispose ();
      Application.Exit ();
   }

   //==========================================================================
   private static void Action1Click (Object sender, EventArgs e)
   {
      // nur als Beispiel:
      // new MyForm ().Show ();
   }

   //==========================================================================
   private static void NotifyIconDoubleClick (Object sender, EventArgs e)
   {
      // Was immer du willst
   }


}
    }
}

So bekomme ich die Fehlermeldung:

Für das nicht statische Feld, die Methode oder die Eigenschaft 'Zuarbeit.Program.t1_Tick(object, System.EventArgs)' ist ein Objektverweis erforderlich. (CS0120) - \SharpDevelop Projects\Zuarbeit\Zuarbeit\Program.cs:76,13
04.09.2019 - 09:42 Uhr

Hmm,

das hab ich mir auch schon überlegt und hab per Google einiges zusammengesucht und probiert. Doch leider erhalte ich mit diesem Code:

/*
 * Erstellt mit SharpDevelop.
 * Benutzer: Rettig
 * Datum: 02.09.2019
 * Zeit: 13:24
 * 
 * Sie können diese Vorlage unter Extras > Optionen > Codeerstellung > Standardheader ändern.
 */
using System;
using System.Windows.Forms;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Drawing;
using System.Timers;

namespace Zuarbeit
{
	/// <summary>
	/// Class with program entry point.
	/// </summary>
	internal sealed class Program
	{
		/// <summary>
		/// Program entry point.
		/// </summary>  


//*****************************************************************************
static class MyNotifyIconApplication
{
   private static NotifyIcon  notico;

    //==========================================================================
   public static void Main (string [] astrArg)
   {
              Timer t1 = new Timer(); // Timer anlegen
			  t1.Interval = 100; // Intervall festlegen, hier 100 ms
			  t1.Tick+=new EventHandler(t1_Tick); // Eventhandler ezeugen der beim Timerablauf aufgerufen wird
			  t1.Start(); // Timer starten


   	          string fileName = "";
	          string sourcePath = @"Z:\DHL\";
	          string targetPath =  @"Z:\DHL\Versand\";
	
	          // Use Path class to manipulate file and directory paths.
	          string sourceFile = System.IO.Path.Combine(sourcePath, fileName);
	          string destFile = System.IO.Path.Combine(targetPath, fileName);

		      
	          void t1_Tick(object sender, EventArgs e)
			  {
	          foreach (var fn in Directory.GetFiles(@"Z:\DHL", "*.txt")) {
           
           	  	// Eine Backupdatei von der Quelldatei anlegen 
                fileName = System.IO.Path.GetFileNameWithoutExtension(fn);
	           destFile = System.IO.Path.Combine(sourcePath, fileName+".bak");
	           System.IO.File.Copy(fn, destFile, true);
	           
	           // in der Textdatei alle # mit | ersetzen.
	           string text = File.ReadAllText(fn);
	           text = text.Replace("#", "|");
	           File.WriteAllText(fn, text);
	           
	           
	           
	           // die Datei in den Zielordner kopieren und danach löschen
	           fileName = System.IO.Path.GetFileName(fn);
	           destFile = System.IO.Path.Combine(targetPath, fileName);
	           System.IO.File.Copy(fn, destFile, true);
	           System.IO.File.Delete(fn);
	           MessageBox("nochmal");
              }
	          }
   	
   	  ContextMenu cm;
      MenuItem    miCurr;
      int         iIndex = 0;

      // Kontextmenü erzeugen
      cm = new ContextMenu ();

      // Kontextmenüeinträge erzeugen
      miCurr = new MenuItem ();
      miCurr.Index = iIndex++;
      miCurr.Text = "&Aktion 1";           // Eigenen Text einsetzen
      miCurr.Click += new System.EventHandler (Action1Click);
      cm.MenuItems.Add (miCurr);

      // Kontextmenüeinträge erzeugen
      miCurr = new MenuItem ();
      miCurr.Index = iIndex++;
      miCurr.Text = "&Beenden";
      miCurr.Click += new System.EventHandler (ExitClick);
      cm.MenuItems.Add (miCurr);

      // NotifyIcon selbst erzeugen
      notico = new NotifyIcon ();
      notico.Icon = new Icon("smile.ico"); // Eigenes Icon einsetzen
      notico.Text = "Doppelklick mich!";   // Eigenen Text einsetzen
      notico.Visible = true;
      notico.ContextMenu = cm;
      notico.DoubleClick += new EventHandler (NotifyIconDoubleClick);

      // Ohne Appplication.Run geht es nicht
      Application.Run ();
   }

   //==========================================================================
   private static void ExitClick (Object sender, EventArgs e)
   {
      notico.Dispose ();
      Application.Exit ();
   }

   //==========================================================================
   private static void Action1Click (Object sender, EventArgs e)
   {
      // nur als Beispiel:
      // new MyForm ().Show ();
   }

   //==========================================================================
   private static void NotifyIconDoubleClick (Object sender, EventArgs e)
   {
      // Was immer du willst
   }
   
}
	}
}

nur Fehlermeldungen. Ich denke es liegt an der falschen Position des Timers, aber ich weiß nicht wo er hin muß. Kann mir jemand dabei helfen?

Wie gesagt, bin absoluter Neuling und versuche "learning by doing" =)

03.09.2019 - 22:40 Uhr

Hallo,

ich bin Anfänger und habe eine Frage, die wahrscheinlich manche zum Lachen bringt.

In meinem Quellcode habe ich eine Foreach-Schleife.
Diese soll alle 15 Sekunden ausgeführt werden so lange das Programm offen ist.

Es handelt sich um eine Windows-Anwendung bei der eun Notification Icon im Systray zu sehen ist, sonst nichts.
Den Code Schnippsel habe ich von hier: https://dotnet-snippets.de/snippet/v...-anwendung/541

und hier ist der Code:


/*
 * Erstellt mit SharpDevelop.
 * Datum: 02.09.2019
 * Zeit: 13:24
 *
 * Sie können diese Vorlage unter Extras > Optionen > Codeerstellung > Standardheader ändern.
 */
using System;
using System.Windows.Forms;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Drawing;

namespace Zuarbeit
{
    /// <summary>
    /// Class with program entry point.
    /// </summary>
    internal sealed class Program
    {
        /// <summary>
        /// Program entry point.
        /// </summary>  


//*****************************************************************************
static class MyNotifyIconApplication
{
   private static NotifyIcon  notico;

    //==========================================================================
   public static void Main (string [] astrArg)
   {
              string fileName = "";
              string sourcePath = @"Z:\DHL\";
              string targetPath =  @"Z:\DHL\Versand\";

              // hier werden die Pfade angegeben
              string sourceFile = System.IO.Path.Combine(sourcePath, fileName);
              string destFile = System.IO.Path.Combine(targetPath, fileName);

              foreach (var fn in Directory.GetFiles(@"Z:\DHL", "*.txt")) {

                // Eine Backupdatei von der Quelldatei anlegen
                fileName = System.IO.Path.GetFileNameWithoutExtension(fn);
               destFile = System.IO.Path.Combine(sourcePath, fileName+".bak");
               System.IO.File.Copy(fn, destFile, true);

               // in der Textdatei alle # mit | ersetzen.
               string text = File.ReadAllText(fn);
               text = text.Replace("#", "|");
               File.WriteAllText(fn, text);

               // die Datei in den Zielordner kopieren und danach löschen - hier könnte wohl auch gleich verschoben werden ^^
               fileName = System.IO.Path.GetFileName(fn);
               destFile = System.IO.Path.Combine(targetPath, fileName);
               System.IO.File.Copy(fn, destFile, true);
               System.IO.File.Delete(fn);
              }

      ContextMenu cm;
      MenuItem    miCurr;
      int         iIndex = 0;

      // Kontextmenü erzeugen
      cm = new ContextMenu ();

      // Kontextmenüeinträge erzeugen
      miCurr = new MenuItem ();
      miCurr.Index = iIndex++;
      miCurr.Text = "&Aktion 1";           // Eigenen Text einsetzen
      miCurr.Click += new System.EventHandler (Action1Click);
      cm.MenuItems.Add (miCurr);

      // Kontextmenüeinträge erzeugen
      miCurr = new MenuItem ();
      miCurr.Index = iIndex++;
      miCurr.Text = "&Beenden";
      miCurr.Click += new System.EventHandler (ExitClick);
      cm.MenuItems.Add (miCurr);

      // NotifyIcon selbst erzeugen
      notico = new NotifyIcon ();
      notico.Icon = new Icon("smile.ico"); // Eigenes Icon einsetzen
      notico.Text = "Doppelklick mich!";   // Eigenen Text einsetzen
      notico.Visible = true;
      notico.ContextMenu = cm;
      notico.DoubleClick += new EventHandler (NotifyIconDoubleClick);

      // Ohne Appplication.Run geht es nicht
      Application.Run ();
   }

   //==========================================================================
   private static void ExitClick (Object sender, EventArgs e)
   {
      notico.Dispose ();
      Application.Exit ();
   }

   //==========================================================================
   private static void Action1Click (Object sender, EventArgs e)
   {
      // nur als Beispiel:
      // new MyForm ().Show ();
   }

   //==========================================================================
   private static void NotifyIconDoubleClick (Object sender, EventArgs e)
   {
      // Was immer du willst
   }

}
    }
}

Danke 😁