Hallo Leute,
ich habe folgendes, einen Task welcher eine Berechnung asynchron durchführt, die Berechnungschritte werden in einer Loop berechnet (Pseudo):
private Task<ResponseResult> DoCalc(RequestData requestData)
{
return Task.Factory.StartNew(
(requestData) =>
{
while (true)
{
// hier wird berechnet:
_success= _calc.RunSingleCycle();
if(_success)
break;
}
}, requestData
, ct);
}
nun möchte ich aber die einzelnen Berechnungsschritte "durchsteppen" um den berechnung testen zu können, und habe folgendes gemacht:
private readonly SemaphoreSlim _syncWaitCycle = new SemaphoreSlim(0);
private readonly SemaphoreSlim _syncWaitCycle2 = new SemaphoreSlim(0);
private Task<ResponseResult> DoCalc(RequestData requestData)
{
return Task.Factory.StartNew(
(requestData) =>
{
while (true)
{
// hier wird berechnet:
_syncWaitCycle.Wait(-1); //HIER warten auf näcshten schritt
_success= _calc.RunSingleCycle();
_syncWaitCycle2.Release(); //Hier feedback, wenn schritt berechnet wurde
if(_success)
break;
}
}, requestData
, ct);
}
//Berechnung schritt durchführen
public bool RunSingleCycle()
{
_syncWaitCycle.Release();
_syncWaitCycle2.Wait(-1);
return _success;
}
ich finde das aber keine schöne Lösung, habt ihr ne Idee??
Das Beispiel für den WinForms-Timer ist leider nicht so gut, da es ein Konsolenprojekt dafür benutzt.
Besser nutze direkt dieses WinForms-Beispiel: C# Timer Control (also "Windows Forms Application" als Projekttyp auswählen).
Für Konsolenprojekte sollte besser der System.Threading.Timer oder System.Timers.Timer eingesetzt werden.
Hallo,
das sauberste ist, wenn Form2 dein Hauptfenster ist. Im FormLoad kannst du dann den Anmeldebildschirm als modalen Dialog anzeigen. - Solange sollte dann das Form2 nicht angezeigt werden. Nach erfolgreicher Anmeldung schließt du den Anmeldedialog und Form2 wird fertig gezeichnet. - Das ist aus meiner Sicht die beste Variante.
Aufbau der XML Datei
<ConfigFile xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Logging On="1" FileSize="5000000" Path="d:\" />
<Items>
<Item Name="1. Item">
<Control Type="Box" />
</Item>
<Item Name="2. Item">
<Control Type="TEXT"/>
</Item>
</Items>
XML Klassen
namespace Forum.MyApp.Client
{
[XmlInclude(typeof(XMLItem))]
[XmlRoot(ElementName = "ConfigFile")]
public class XMLDataSet
{
[XmlElement("Logging")]
public XMLLog _XMLLog;
public List<XMLItem> _XMLItems
...
}
public class XMLLog
{
[XmlAttribute("On")]
public Boolean On = true;
[XmlAttribute("FileSize")]
public UInt32 FileSize = 1000;
[XmlAttribute("Path")]
public string Path = "d:\";
}
**
Lesen der XML Datei**
XmlSerializer Serialize = new XmlSerializer(typeof(XMLDataSet));
Stream Reader = new MemoryStream(System.Text.Encoding.ASCII.GetBytes(File.ReadAllText("d:\\File.xml")));
// Deserialize the data set
XMLConfigFile = (XMLDataSet)Serialize.Deserialize(Reader);
// Close the reader
Reader.Close();
if (XMLConfigFile._XMLLog != null)
dann mache etwas mit den Einträgen
Dieser if (XMLConfigFile._XMLLog != null) Anweisung könnte ich mir sparren wenn ich die Möglichkeit hätte dass die Klasse _XMLLog immer aufgebaut wird. Unabhängig ob der Eintrag <Logging On="1" FileSize="5000000" Path="d:\" /> in der XML Datei da ist oder nicht. Im Falle nicht da seins wird das Objekt mit Defaultaparametern gefüllt "public Boolean On = true;".
Ich hoffe es ist etwas verständlicher
Hallo Forum,
vielen Dank für die vielen Beiträge zu meiner Frage.
@ Hustbaer: Ja das ist richtig – die Referenzen aller Delegaten sind daher auch in der GUI Klasse e.g. Form1 während der gesamten Laufzeit gespeichert.
Gut – ich werde mal die App in der das Problem einer Zugriffsverletzung im Zusammenhang mit dem Zugriff auf eine richtextbox über Delegaten auftrat nochmal vorkramen und genauer untersuchen. Vielleicht gab es ja doch eine andere Ursache – wenn nicht, dann melde ich mich hier wieder zurück.
MfG.
Hallo,
ich bin auf der Suche nach einer online Newsgroup für C# so wie z.B. comp.lang.java.programmer für Java. Ich habe da nichts gefunden außer das hier:
https://msdn.microsoft.com/en-us/library/bb250452(v=vs.85).aspx
Und dort gibt es keine spezielle Newsgroup für C#. Hab ziemlich gesucht und nichts gefunden. Für einen Tip wäre ich dankbar.
Gruß, Saxo
Du mußt eine neues C#-Projekt erstellen: Erstellen eines Projekts (Visual C#) bzw. konkreter Gewusst wie: Erstellen einer C#-Konsolenanwendung (oder Gewusst wie: Erstellen eines neuen Windows Forms-Anwendungsprojekts).
Oder schau dir dieses Video an: Visual Studio 2015 installieren & verwenden | C# Tutorial Deutsch (Schritt #2: Konsolenprojekt erstellen)
Zu faul zum Googlen?
Na ja, du benötigst für die pictureBox die beiden events MouseDown und MouseMove sowie die MouseLocation.
namespace Image
{
public partial class Form1 : Form
{
private Point MouseDownLocation;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
// Hier Bild in pictureBox1 einsetzen
}
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == System.Windows.Forms.MouseButtons.Left)
{
MouseDownLocation = e.Location;
}
}
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == System.Windows.Forms.MouseButtons.Left)
{
pictureBox1.Left = e.X + pictureBox1.Left - MouseDownLocation.X;
pictureBox1.Top = e.Y + pictureBox1.Top - MouseDownLocation.Y;
}
}
}
}
Sorry, habe zu schnell gepostet - so wie zuletzt von mit geschrieben funktioniert es!!
Ich hatte zunächst noch DateTime? dt = DateTime.MinValue; stehen - damit geht es nicht.
Danke Euch füre Eure Hilfe!!!
Für UWP Apps gibt es den Namespace Windows.Media.Capture. Ansonsten gibt es da noch Sachen wie: https://www.codeproject.com/Articles/15219/WebCam-Fast-Image-Capture-Service-using-WIA
Ich verstehe den Wunsch wissen zu wollen wie sich die Hosting-Situation in Zukunft entwickeln wird. Ich weiss nur nicht ob das jemand so einfach voraussagen kann. Es wird halt u.A. davon abhängen wie viele User .NET Core für gehostete Projekte verwenden, und das lässt sich schwer voraussagen.
Was aber immer als Lösung bleibt ist eine VM mit Root-Zugang anzumieten. Kostet auch nicht die Welt. Und da kannst du .NET Core installieren so viel du willst.
Ansonsten...
Seimann schrieb:
Ist die Programmierung von einfachen CMS Webanwendungen möglich wie z.B. Wordpress?
Ja, sicher.
Seimann schrieb:
Mein Projekt wird CMS ähnlich und soll in Zukunft auch wie eine Webanwendung auf einen günstigen Hosting-Provider laufen können, weiteres soll aber auch Serverseitige anwendungen möglich sein die unter Linux und Windows Systemen laufen soll.
Deine verwendung des Begriffs "serverseitig" ist sehr verwirrend. Und bei "Serverseitige anwendungen" hast du die Gross/Kleinschreibung genau verkehrt herum => "serverseitige Anwendungen".
Seimann schrieb:
PHP fällt schonmal aus, funktioniert zwar als einfaches CMS, aber Serverseitig möchte ich mit PHP und Bash nicht "rum basteln"
...wieso?
Gerade wenn der Server nicht irgendwo in der Wolke gehostet ist, sollte PHP kein Ding sein. Weil man viel besser kontrollieren kann wer was wo wie machen darf/kann.
Seimann schrieb:
Mein Projekt benötigt mindestens noch 1-2 Jahre, ich muss aber jetzt schon Planen.
Ja, klar, Standardsituation.
Vielleicht solltest du die Wahl stärker davon abhängig machen mit was du produktiv und gut arbeiten kannst, und weniger davon was wo wie billig zu hosten ist. Denn falls das Projekt nie fertig wird, ist es egal wie teuer das Hosting gewesen wäre. Und die Chance dass du fertig wirst steigerst du deutlich wenn du ne Technologie verwendest mit der du eben angenehm und produktiv arbeiten kannst.
Hallo,
nutze eine typisierte Liste aus dem Namespace System.Collections(.Generic). Solltest du keine Datenbindung benötigen, wäre die List<T> das richtige für dich. Bei Start der Anwendung kannst du die Liste dann erstellen.
List<Rectangle> myRectangles = new List<Rectangle>();
Wenn du zur Laufzeit deine Rechtecke generierst kannst du diese dann einfach mittels folgendem Aufruf hinzufügen:
myRectangles.Add(newRectangle); // newRectangle repräsentiert hier dein erstelltes Rechteck
Möchtest du diese dann beispielsweise alle zeichnen kannst du einfach per ForEach-Schleife über die Einträge iterieren.
Hallo,
zur Anzeige der Form im Designer verwendet die IDE den Form-Code. - Durch das anzeigen, wird das Load ausgeführt.
Damit wird dein Programmablauf der im Load steht schon zur Design-Zeit ausgeführt. Prüfe vor Ausführung ob du im Designer bist. Damit solltest du das Problem gelöst kriegen.