Laden...
H
harrylask myCSharp.de - Member
Steuerungstechniker Salzburg Dabei seit 02.07.2005 59 Beiträge
Benutzerbeschreibung

Forenbeiträge von harrylask Ingesamt 59 Beiträge

25.02.2010 - 14:58 Uhr

Hallo ErfinderDesRades,
ja, die "Serialisierung", Erstellung und "Deserialisierung" wird in einem Nebenthread gemacht, die Erstellung selbst in einer externen Applikation. Schön ist wieder was anderes aber somit bekomme ich wenigstens das lästige ruckeln weg.

Wie gesagt, sämtliche Ansätze (Threads und deren Prioritäten, AppDomains oder eine zweite MessageLoop (was ich mir von dem versprach weiss ich nicht mehr)) verliefen bei mir im Sande, das ruckeln blieb. Alles was irgendwie im Kontext meiner Anwendung lief half nicht.

Grüsse, harrylask

25.02.2010 - 14:29 Uhr

Hallo ErfinderDesRades,

aber wennich den code jetzt angucke, wunder ich mich, dass du 2 Graphics-objekte brauchst. mit g1 löschst du die Source, mit g2 kopierst du die (gelöschte) Source nach Destination.

Das Beispiel dient nur zum Zweck, es ist kein Originalcode. Ohne Graphics.DrawImage() ist bei mir kein Ruckeln feststellbar, mit schon.

ipcChannel, das heißt, hinter der property "Source" steckt ein Proxy, der erstmal über den Channel die bitmap anfordern muß?

nee, ist quatsch.

Jepp, wie würde dein Ansatz aussehen?

Grüsse, harrylask

25.02.2010 - 10:12 Uhr

Meine Lösung ist die das mir eine externe Anwendung mit der ich über einen IpcChannel kommuniziere das Bitmap erstellt, sämtliche Versuche die im Kontext meiner Anwendung liefen brachten den GUI Thread ins stocken.

Grüsse, harrylask

13.02.2010 - 12:52 Uhr

So, vorerst danke für die Hinweise.

@talla herbivore
Die Anwendung ist für einen Leitstand einer Anlage auf deren Oberfläche die Anlage selbst animiert dargestellt wird. Die Teile der Anlage liegen als Bitmaps als Resource in der Anwendung vor. In bestimmten Intervallen wird asynchron eine Methode aufgerufen die das Bitmap erstellt und je nach Auflösung skaliert.

@Allgemein
Wenn ich so wie ErfinderDesRades vorschlägt einen DauerbetriebNebenThread laufen lasse ohne der Anweisung Graphics.DrawImage() reagiert meine Hauptanwendung wie gewünscht. Füge ich aber Graphics.Draw() ein reagiert die Anwendung träge wenn sie mE irgendwas mit GDI zu tun bekommt.

aber dann würden auch alle anderen anwendungen diesen hänger haben

Nö, ist nicht der Fall. Alle anderen funktionieren normal.

Mein Verdacht ist das es irgendwie mit der GDI zu tun hat, hab aber keine Ahnung warum, mir fällt dazu auch keine Lösung ein wie ich das abstellen könnte. Könnt ihr das Verhalten eigentlich reproduzieren?

So long, harrylask

12.02.2010 - 11:53 Uhr

Der Link hilft mir nicht weiter, ich lagere ja die Erstellung des Bitmaps in einen extra Thread aus damit mir der GUI Thread während dessen nicht blockiert wird. Er wird aber trotzdem kurz blockiert (beim Resizen, bewegen eines anderen Fensters auf der Oberfläche des GUIs). Die Ursache ist Graphics.DrawImage() die eigentlich eh im Nebenthread ausgeführt wird, warum stockt mir dann die Hauptanwendung?

12.02.2010 - 11:19 Uhr

Hallo Leute,
ich erstelle in einer asynchronen Methode die zyklisch aufgerufen wird ein Bitmap welches ich am Ende je nach Fenstergrösse skaliere, funktioniert prinzipiell einwandfrei. Der Haken ist das mir die Anweisung Graphics.DrawImage() für einen Bruchteil den GUI Thread blockiert.


    private void timer1_Tick(object sender, EventArgs e)
    {
      new MethodInvoker(this.Test).BeginInvoke(null, null);
    }

    private void Test()
    {
      Bitmap Source = new Bitmap(4380, 1650);
      Bitmap Destination = new Bitmap((int)(Source.Width * 0.26F), (int)(Source.Height * 0.26F));

      using (Graphics g1 = Graphics.FromImage(Source))
      {
        g1.Clear(Color.White);

        using (Graphics g2 = Graphics.FromImage(Destination))
        {
          g2.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
          g2.DrawImage(Source, 0, 0, Destination.Width, Destination.Height);
        }
      }
    }

Wenn ich die g.DrawImage() Anweisung weglasse gehts, hat jemand eine Idee warum das so ist bzw. wie ich das umgehen kann?

Danke, harrylask

29.05.2009 - 00:20 Uhr

Hallo Neokil,
ALT-F4 kannst du im FormClosing Event abfangen (FormClosingEventArgs.Cancel auf true setzen).

Grüsse, harrylask

16.03.2009 - 21:14 Uhr

Hallo Staregatefreak,
vielleicht meinst du diesen Bug im ?Framework? (http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=98281)?

Grüsse, harrylask

18.10.2008 - 21:14 Uhr

Hallo ChrDressler,


string inputString = (value ?? string.Empty).ToString();

ist äquivalent zu


string inputString = (value != null ? value : string.Empty).ToString();

Grüsse, harrylask

10.09.2007 - 16:04 Uhr

Hallo JuyJuka,
mir fällt es auch immer schwer zu posten, ich feile an meinen Beiträgen immer minutenlang herum bis sie mir gefallen, darum auch meine geringe Anzahl an Beiträgen.
Aber ebenso lese ich (meistens) die Beiträge immer genau durch und dabei ist mir dein "sollte" aufgefallen. Sowas irritiert mich und ich frage mich dann immer warum ich dies oder jenes nicht tun sollte. Hört sich zwar kleinkariert an aber mich hat der Beruf geprägt, muss immer alles hinterfragen ... fast schon krankhaft 👅

Grüsse und nix für ungut, harrylask

10.09.2007 - 15:36 Uhr

Original von JuyJuka

Original von nin

if (sender is ListView)  
   ListView lst = sender as ListView;  

Ahhh! Hilfe!! Der :::

Die beiden sollen (sollten) nie zusammen verwendet werden. So gehts "richtig":

  
if (sender is ListView)  
 ((ListView)sender).DoWhatEver();  
  

ODER

  
ListView lst = sender as ListView; // hier wird keine Exception ausgelöst, sondern NULL zurück gegeben, wenn sender kein ListView ist.  
if(lst!=null)  
  doWhatEver();  
  

Hallo JuyJuka,
ich seh da keinen grossartigen Unterschied zwischen deinem und nin´s Beispiel, nin prüft ja vorher mit dem is Operator ob es sich um ein ListView Objekt handelt. Ob man nachher castet oder den as Operator verwendet ist egal (abgesehen von der Performance da ja eine Prüfung des Typs durchgeführt wird).

PS: Nichtsdestotrotz würde ich nach der Prüfung mit is auch manuell casten.

PPS: Mir hat der Satz "Die beiden sollen (sollten) nie zusammen verwendet werden" nicht gefallen, besser wäre gewesen "müssen nicht" oder soähnlich.

Grüsse, harrylask

15.06.2007 - 20:22 Uhr

supergreg war wochenlang unser hero!

14.03.2007 - 10:50 Uhr

Hallo Piper,
etwas eleganter ginge es mit den Methoden aus der Char Klasse.


if (!Char.IsDigit(e.KeyChar))
  if (!Char.IsControl(e.KeyChar))
    e.Handled = true;

Grüsse, harrylask

06.03.2007 - 12:28 Uhr

Reine Vermutung, bei einer Form gibts die Methode CreateHandle(), vielleicht hilft dir die weiter.

Grüsse, harrylask

28.02.2007 - 21:28 Uhr

Stichwort: Keyboard Hook

28.02.2007 - 20:26 Uhr

ist ja ziemlich still geworden um myCSHARP.de 3, gibts neue Infos?

28.02.2007 - 19:31 Uhr

GUI ohne Designer, schlichtweg undenkbar.

15.11.2006 - 18:23 Uhr

Hallo el_MKay,
siehe Application.StartupPath.

06.11.2006 - 14:32 Uhr

Du hast recht, sie werden gespeichert, das Bookmarkwindow war mir neu. Gefallen find ich daran aber trotzdem nicht, obwohl es dem was ich wollte recht nahe kommt, man kanns halt niemanden recht machen.

grüsse, harry

06.11.2006 - 14:10 Uhr

Bookmarks, ich weiss nicht, gehe zum nächsten Boomark, gehe zum vorherigen Bookmark, zu umständlich, werden die überhaupt gespeichert? Die anderen Möglichkeiten die du beschreibst kenne ich, praktisch, aber nicht im meinen Sinne.

Was ich möchte wäre in etwa sowas (Codeausschnitt)


// DROP TABLE -> [URL]http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_de-dz_7uud.asp[/URL]
using (SqlCommand SqlCom = new SqlCommand("DROP TABLE " + Table, Con))
  SqlCom.ExecuteNonQuery();

ist, find ich, ganz praktisch, STRG Taste+Mausklick und die Seite wird geöffnet. Nun möchte ich das dieser Link auf eine bestimmte Stelle in meine Source zeigt damit ich schnell und einfach dorthin navigieren kann.

danke und grüsse, harry

06.11.2006 - 13:26 Uhr

Besteht in VS2005 die Möglichkeit zB. via Hyperlink von einer Codestelle zu einer anderen zu verweisen? Dann müsste ich mich nicht immer durch den Source "quälen" bis ich eine bestimmte Verwendungsstelle finde.

16.10.2006 - 07:06 Uhr

Für alle die beim Suchen auf diesen Thread stossen. Hier findet man einen CRC Tester, Code zum Erstellen von CRC´s und weiterführende Links die sich mit diesem Thema befassen.

harrylask

14.09.2006 - 14:28 Uhr

hm, im Selected Event prüfen ob die Node editiert werden kann und dementsprechend TreeView.LabelEdit auf true/false setzen.

13.07.2006 - 14:42 Uhr

@talla:
jaja, Wertetyp, hab ich auch gemeint, war spät gestern, müde ... musste nach Hause.

@Traumzauberbaum:

Das Problem ist schon beim ersten Beispiel vorhanden.
Versuch doch mal eine Variable vom Typ CUse zu erstellen. Es ist unmöglich, weil der Parameter T rekursive Beschränkungen hat. Das was du als T bei CUse eingibst, will er auch als T bei CTest einsetzen. Beispiele:

CUse<CTest<int>> => Constraint nicht erfüllt weil T != CTest<CTest<int>
CUse<CTest<CTest<int>>> => Constraint nicht erfüllt weil T != CTest<CTest<CTest<int>>>

In deinem zweiten Beispiel äußert sich das dann verstärkt. Der Parameter bei CTest kann nur ein struct sein, aber bei der Definition von CUse kann der Parameter nur vom Typ CTest<T> sein => Widerspruch. Wenn du class für Referenztypen genommen hättest, würde er zwar so compilieren, aber es ist wieder unmöglich eine Variable von dem Typ zu erstellen.

hmm, leuchtet mir halbwegs ein ... probiers mal mit einem Interface.

Danke, Harry

12.07.2006 - 22:20 Uhr

Hallo mitsammen,
ich hab ein kleines Problem bei der Vereinbarung der Parameter von generischen Klassen. Ich will eine generische Klasse die nur Klassen zulässt die von einer generischen Klasse abgeleitet wurden. Die Basisklasse legt in der Vereinbarung fest das nur Referenztypen zugelassen sind.


/* Beispiel 1: Basisklasse ohne Constraint */
public class CTest<T> { }
public class CUse<T> where T : CTest<T> { } /* das funktioniert */


/* Beispiel 2: Basisklasse mit Constraint */
public class CTest<T> where T : struct { }
public class CUse<T> where T : CTest<T> { } /* da bekomm ich dann einen Fehler (CS0453) */

Der Fehler besagt das ich nur Referenztypen verwenden kann (korrigiert mich wenn das nicht stimmt). Wie muss in Beispiel 2 das Constraint lauten damit es funktioniert?

Grüsse, Harry

29.06.2006 - 08:00 Uhr

Wenn Du das Objekt selbst explizit zerstören willst, solltest Du Dir mal das IDisposable-Interface ansehen.

Das stimmt so nicht, Dispose() dient zur Freigabe von unmanaged Resourcen, das Objekt wird dadurch nicht "zerstört". Solange eine Referenz auf ein Objekt existiert wird es vom GC nicht freigegeben, egal ob du es "disposed" oder nicht.

27.06.2006 - 07:29 Uhr

Wurde hier schon diskutiert.

26.06.2006 - 13:10 Uhr

Freund Nummer 1: Suchfunktion im Forum
Freund Nummer 2: Google
Freund Nummer 3: Newsgroup

Ich garantiere dir dass du damit schnell an dein Ziel kommen wirst! 😉

07.06.2006 - 10:14 Uhr

und will man unions dennoch verwenden, aus welchen gründen auch immer, kannst du sie mit c# nachbilden, stichwort LayoutKind.Explicit

07.06.2006 - 09:18 Uhr

wenn man es mal besser weiss als der compiler besteht die möglichkeit warnungen mittels


#pragma warning disable NUMMER
#pragma warning restore NUMMER

zu unterdrücken.

Aber:
warnungen sollte man stets beachten, sie werden nicht ohne grund ausgegeben und sind zumeist schnell behoben.

06.06.2006 - 10:02 Uhr

Wenn man z.B. einen 1 Pixel breiten Strich darstellen möchte, muß man wieder den Pen skalieren, damit das auch klappt.

einen 1 pixel breiten pen bekommst du wenn du beim erzeugen des pens width mit 0 belegst!

ansonsten schliesse ich mich herbivore an, wenn ich pixelgenau zeichnen will arbeite ich mit GraphicsUnit.Pixel und skaliere selbst. GraphicsUnit.Millimeter/PageScale hat mir gute dienste geleistet als ich objekte von cad zeichnungen darstellen musste.

19.05.2006 - 07:07 Uhr

aus der msdn

(using) Definiert einen Bereich, außerhalb dessen Objekte verworfen werden.

22.03.2006 - 10:45 Uhr

wparam ist schon richtig, nur ist PBT_APMSUSPEND eine konstante und kein string.

21.03.2006 - 14:53 Uhr

ich vermute das der zugriff auf bc

bc.Client.Send(bytes);

die exception auslöst.

schau dir dieses beispiel an, ich denke das löst dein problem
Von Form2 auf Form1 zugreifen.

21.03.2006 - 08:36 Uhr

Original von dr4g0n76
Frag GetCursorPos in einem Timer ab. Dann brauchts du keine Hooks.

[DllImport("user32.dll")]
static extern bool GetCursorPos(out Point lpPoint);

erinnert mich irgendwie an kbhit() X(
ausserdem will er ja auch keyboard events mitbekommen!

21.03.2006 - 07:17 Uhr

ScaleTransform vergrössert bzw. verkleinert deine Zeichenausgaben, negative Werte spiegeln deine Grafiken auf der entsprechenden Achse. In der deutschen MSDN findest du eine Webcastserie die sich mit GDI+ auseinandersetzt.

20.03.2006 - 07:01 Uhr

du erreichst das mit Nullpunktverschiebung und Skalierung, das Graphics Objekt bekommst du zB. im Paint Event.

Graphics.TranslateTransform(Graphics.ClipBounds.Width, Graphics.ClipBounds.Height);
Graphics.ScaleTransform(1, -1);

10.03.2006 - 16:14 Uhr

in solchen fällen kannst du dir auch den code abgucken den dir die ide generiert wenn du mit dem designer ein control einfügst. als ausgangspunkt immer wieder gut zu gebrauchen.

09.03.2006 - 07:15 Uhr

Original von Lynix
Ein einfaches Beispiel wo man dieses using häufig sieht ist bei der Verwendung von Funktionen File.Exists oder Directory.Exists

Wenn man nach der Verwendung einer dieser Funktionen nicht explizit dafür sorgt, dass das Handle auf die Datei / das Verzeichnis wieder freigegeben wird, ist die Datei anschliessend einfach für alle weiteren Zugriffe gesperrt.

Da File.Exists bzw. Directory.Exists statische Methoden sind, gibts leider keine Möglichkeit explizit ein Dispose aufzurufen daher hilft da nur noch die Definition eines using-Blocks. Dieses sorgt dann dafür, dass die Datei / das Verzeichnis am Ende des Blocks wieder freigegeben wird.

die msdn sagt

The using statement allows the programmer to specify when objects that use resources should release them. The object provided to the using statement must implement the IDisposable interface. This interface provides the Dispose method, which should release the object's resources.

die klasse File ist static und solche können keine schnittstellen implementieren. um using zu verwenden muss das objekt aber IDisposable implementiert haben.

24.02.2006 - 13:38 Uhr

obwohl das thema schon erledigt ist, hier ein link der das mythos um dispose ausführlichst erklärt!

21.02.2006 - 15:36 Uhr

du musst beim refreshen die alten items löschen, siehe listviewname.items.clear()

04.02.2006 - 07:12 Uhr

schau mal unter System.Windows.Forms.Cursor.Clip

12.01.2006 - 18:53 Uhr

vielleicht hilft dir dieser link weiter
http://www.mikrocontroller.net/forum/read-8-160474.html

09.01.2006 - 20:32 Uhr

dieses problem hab ich auch, es handelt sich anscheinend um einen bug.
guckst du http://lab.msdn.microsoft.com/productfeedback/viewfeedback.aspx?feedbackid=20d0d9f9-2625-44f3-8542-35577f6073d6

20.12.2005 - 09:01 Uhr

memorystream?

20.12.2005 - 07:45 Uhr

guckst du
http://support.microsoft.com/kb/834886/DE/?FR=1
xp prof. hat den treiber schon installiert