CSL schrieb:
Wie löschst du Objekte? Bedenke das der GC ein Objekt erst aufräumen kann wenn alle Referenzen darauf weg sind, dh auch alle Event handler etc.
Das war das Problem, mein Eventhandling war noch nicht abgemeldet. Musste nun doch einmal durch alle zu löschenden Objekte rennen um genau dies zu machen.
Dravere schrieb:
Darf ich zuerst mal fragen, wie du den Speicherverbrauch deiner Anwendung ermittelt hast ohne Speicherverbrauch-Tool?
Es geht mir nur darum, dass du dazu hoffentlich nicht den Taskmanager benutzt hast
Grüssli
Naja das hab ich mit GC.GetMemoryUsage gemacht. bringt zumindest nen halbwegs brauchbaren Wert.
Besten dank euch allen.
hey,
habe bei folgendem script bzw. script aufruf ein problem:
c#:
if (Page.IsPostBack)
{
string startPlace = Page.ClientQueryString + "#formBegin";
Page.RegisterStartupScript("myScript", "<script language=JavaScript>jumpToFormStart('" + startPlace + "');</script>");
}
und das JS:
function jumpToFormStart(startPlace) {
var theNewPlace = "index.aspx?" + startPlace;
self.location = theNewPlace;
}
Auf der Website welche bei mir local läuft funktioniert das Script super, im ie sowie im Firefox, bei der Webpage welche allerdings auf dem Server liegt funktioniert das Script nur im Firefox.
hat da vllt. jemand eine Idee woran das das liegen könnte?
Hallo Leute,
ich habe einen Windows Service geschrieben, welcher irgendein Programm unter einer bestimmten Benutzerkennung starten soll. Der Windows Dienst ist installiert und als LokalesSystem angemeldet.
Probiert habe ich:
- Process.start(string file, string user, SecureString pw, string domain) -> Exception WIn32 Zugriff verweigert
- CreateProcessWithLogonW(...) -> Exception Error #5
- LogonUser(...), CreateProcessAsUser(...) ->Exception Error #1314
Process.Start(...) und CreateProcessWithLogonW(...) startet aus einem "normalen" Programm, welches kein Windows Dienst ist ohne Probleme das entsprechende Programm (wird auch unter der angegebenen Benutzerkennung ausgeführt)
LogonUser(...), CreateProcessAsUser(...) funktioniert aus einem "normalen" Programm nicht.
Hat jemand eine Idee wie sich dieses Problem lösen lässt?
Kann man die mit sn.exe erzeugte Schlüsseldatei auch in andere Entwicklungsumgebungen als VS benutzen oder ist das eine geschlossene Microsoft-Veranstaltung?
Firefighter schrieb:
Und mal ein kleiner Tip: Du hättest das ganze auch einfach probieren können
hab ich gemacht. läuft jetzt auch. der compiler hat gemeckert, aber es war ein anderer grund.
Hier noch mal ohne Fehler:
public MyDelegate(Base o1, object irgendwas);
public class Base
{
protected static Dictionary<Type, Dictionary<string,MyDelegate>> dict;
public void Do(string s, object value)
{
dict[GetType()][s](this,value);
}
}
public MyDelegate(Base o1, object irgendwas);
public class D1: Base
{
static D1()
{
Type myType =typeof(D1);
dict.Add(myType,new Dictionary<string,MyDelegate>();
dict[myType].Add("IntValue",new MyDelegate(..));
...
}
int IntValue;
}
public class D2: Base
{
static D2()
{
Type myType =typeof(D2);
dict.Add(myType,new Dictionary<string,MyDelegate>();
dict[myType].Add("StringValue",new MyDelegate(..));
...
}
string StringValue;
}
Gibt es einen halbwegs einfachen und schönen Weg einen Local COM Server in C# zu implementieren?
Bis jetzt hab' ich nur die Möglichkeit gefunden IClassFactory selbst zu implementieren, und dann mit CoRegisterClassObject (per PInvoke) zu registrieren.
Gibt es da eine elegantere Variante?
Idealerweise sollte auch gleich die Type-Library im selben C# Projekt definiert werden das auch den Server implementiert.
Das hat MS selber geschrieben.
Die besten DockingControls gibts leider nur gegen bares.
http://www.telerik.com/products/winforms/dock.aspx
http://www.devcomponents.com/
http://www.infragistics.com/dotnet/netadvantage/winforms/windockmanager.aspx
Eventuell ist das hier gut:
http://sourceforge.net/projects/dockpanelsuite/
musst du mal schauen.
Moin,
ich mache das jetzt über den Umweg eines weiteren Programms ... das setzt dann entsprechend die Registry-Werte
Misc.LimitBlankPasswordUse(false);
Process p = new Process();
p.StartInfo.FileName = ".\\myRegEdit.exe";
p.StartInfo.UserName = "bediener";
p.StartInfo.UseShellExecute = false;
p.Start();
Misc.LimitBlankPasswordUse(true);
da Windows glücklicherweise keine Anmeldung mehr mit leerem Passwort zulässt, muss das für den Teil kurz deaktiviert werden ... http://www.heise.de/ct/hotline/Passwortloser-Account-fuer-MachMichAdmin-319732.html ... die Methode ist natürlich nicht wirklich sicher in dem Moment
/// <summary>
/// ermöglicht den Zugriff von Benutzer mit leerem Passwort
/// </summary>
/// <remarks>http://www.heise.de/ct/hotline/Passwortloser-Account-fuer-MachMichAdmin-319732.html</remarks>
/// <param name="value">TRUE wenn leere Passwörter nicht Erlaubt sind</param>
/// <returns>der alte Status</returns>
public static bool LimitBlankPasswordUse(bool value)
{
bool old = false;
RegistryKey key = Registry.LocalMachine;
try
{
key = key.OpenSubKey(@"SYSTEM\CurrentControlSet\Control\Lsa", true);
old = Int32.Parse(key.GetValue("LimitBlankPasswordUse").ToString()) == 1 ? true : false);
key.SetValue("LimitBlankPasswordUse", value ? 1 : 0);
Logging.warn("LimitBlankPasswordUse -> Old: " + old + " - New: " + value);
} catch (Exception ex)
{
Logging.error(ex);
Logging.warn("keine Schreibrechte für Key 'LimitBlankPasswordUse'");
}
return old;
}
falls jemand eine Lösung ohne das Zerstören der Sicherheit hat, dann immer her damit
hand, mogel
CSL schrieb:
Sie werden erst zerstört sobald Closing vorbei ist, darum besteht auch die Möglichkeit beim Closing ab zu brechen.
nun muss ich mal etwas Kleinkarriert sein (falsches Hemd an) ... solange es sich um GUI-Objekte handel -> JA ... wenn es sich umzusätzliche Instanzen handelt, dann existieren die auch noch nach dem Closed-Event, sofern im Event an der Stelle nicht aufgeräumt wird (oder Dispose angepasst wurde)
hand, mogel
Wie im anderen Thread gesagt, solltest du einen besseren Titel wählen und deine Beschreibung präzisieren. Unter der Methode Invoke kann man vieles verstehen. Ich gehe jetzt mal von WPF oder WinForms aus.
Bei diesen beiden Methoden ist es natürlich dazu gedacht, dass ein anderer Thread einen Aufruf im Kontext des UI-Threads machen kann. Dies ist nötig, weil das GUI nicht threadsicher ist.
Grüssli
voke schrieb:
muss dieses new Object[] sein?
die objekte this und a existieren ja schon !
Nein muss es nicht, sofern du ein Control.Invoke oder Dispatcher.Invoke meinst. Deine Beschreibung ist da ziemlich dürftig und der Titel noch mehr.
Bei den beiden von mir genannten Invoke Methoden ist der letzte Parameter mit dem Schlüsselwort params versehen.
Grüssli
Steht alles in der Dokumentation:
http://msdn.microsoft.com/en-us/library/system.threading.autoresetevent.aspx
Calling Set signals AutoResetEvent to release a waiting thread. AutoResetEvent remains signaled until a single waiting thread is released, and then automatically returns to the non-signaled state. If no threads are waiting, the state remains signaled indefinitely.
Etwas sehr einfach gesagt: Der Thread, welcher aktiviert wird, führt zum Reset .
Grüssli
ref und out können nur bei direkten Variablen (bzw. fields) benutzt werden, nicht bei Eigenschaften (und auch ein Indexer ist eine Eigenschaft, d.h. besteht aus einer Get- und Set-Methode).
Als Ausweg ginge:
MyClass controller = new MyClass();
Measurement m = controller.Measurements[0];
FormChild dummy = new FormChild( ref m );
controller.Measurements[0] = m;
Benötigst du denn überhaupt den Parameter als Referenz, d.h. willst du innerhalb der Methode (bzw. Konstruktor) dem Parameter ein neues Objekt (per Zuweisung oder mittels new) zuweisen?
Wenn du nur die Eigenschaften bzw. Member von dem Measurement-Objekt ändern willst, dann brauchst du kein 'ref' anzugeben (außer Measurement wäre als 'struct' deklariert und nicht als 'class').
P.S. Gestern gab es im MyCSharp-Forum eine ähnliche Frage: http://www.mycsharp.de/wbb2/thread.php?threadid=87256 (inkl. Link auf Artikel dazu: http://www.mycsharp.de/wbb2/thread.php?threadid=12251 )
Hi Witte,
das war's tatsächlich. Ich habe beim Client- als auch beim Server-Contract das ServiceKnownType-Attribut gesetzt und jetzt funzt es. Besten Dank nochmal
Greetz,
Chris