A fluent approach to C# parameter validation
De pe blog-ul lui Rick Brewster (paint.net) – http://blog.getpaint.net/2008/12/06/a-fluent-approach-to-c-parameter-validation/
De pe blog-ul lui Rick Brewster (paint.net) – http://blog.getpaint.net/2008/12/06/a-fluent-approach-to-c-parameter-validation/
Descarcati Batch4Web 2.0 beta de aici, si lasati un comentariu.
(Stiu, inca mai are buguri).
Noutati:
- Extensibilitate prin plugin-uri. Cei interesati vor putea sa-si dezvolte propriile pluginuri.
- Motor de procesare imbunatatit.
- Salvare / Reincarcare Workspace-uri; Salvare / Reincarcare profile de procesare
- Plugin-uri continute in kit:
   – Load image (JPEG, PNG, BMP, GIF, WMF suportate nativ) si RAW/CR2/NEF… (folosind dcraw ca si decoder).
   – Resample + Unsharp Mask + EXIF Auto-rotate
   – Watermarking (text si/sau imagine)
   – Salvare ca Jpeg, optional cu redenumire.
Testati si plugin-ul de FTP de aici. Il copiati in directorul (Program Files)\Netimage\Netimage Batch4Web\Plugins.Â
SDK-ul pentru dezvoltarea de pluginuri va fi publicat in momentul release-ului.
Â
Daca vreti un substitut de Photoshop in aproximativ 1.3 MB, incercati aici: www.getpaint.net . Am uitat sa mentionez ca e gratis ?
Facilitati, tutoriale, plugin-uri.
Probabil cei care programeaza in .NET forms de ceva vreme se lovesc frecvent de problema invocarii unei metode a unui control, dintr-un thread altul decat cel care este owner-ul controlului. Nu intru in detaliile problemei, care coboara destul de jos la cozi de mesaje per thread, handle-uri windows si altele;
Solutia cel mai des intalnita este: se face un delegate cu semnatura metodei de invocat, se verifica daca este contextul threadului corect cu Control.IsInvokeRequired, si daca nu, atunci se apeleaza metoda prin Control.Invoke, cu delegate-ul definit anterior.
In timp devine “obositor” si mai ales la proiecte mari, definitia cate unui delegate pentru fiecare metoda posibila. O solutie la “oboseala” ar putea fi urmatoarea (mai putin cateva try – catch blocks
:
class CrossThreadHelper
{
   private delegate Object CallMethodProxyDelegate(Control ctrl, String strMethod, object[] arguments);
    private static Object CallMethodProxy(Control ctrl, String strMethod, object[] arguments)
   {
       MethodInfo method;
       method = ctrl.GetType().GetMethod(strMethod);
       return method.Invoke(arguments);
    }
   public static Object CallMethod(Control ctrl, String strMethod, params object[] arguments)
   {
       if(ctrl.InvokeRequired)
       {
            Delegate = new CallMethodProxyDelegate(CallMethodProxy);
            Object[] newArgs = new Object[3];
            newArgs[0] = ctrl;
             newArgs[1] = strMethod;
            newArgs[2] = arguments;
            return ctrl.Invoke(del, newArgs);
        }
        return CallMethodProxy(ctrl, strMethod, arguments);
    }
}
Exemplu:
CrossThreadHelper.CallMethod(this.frmProgress, “Close”);
Â