{"id":349,"date":"2009-08-26T18:04:59","date_gmt":"2009-08-26T17:04:59","guid":{"rendered":"https:\/\/www.entropywins.wtf\/blog\/?p=349"},"modified":"2009-08-26T18:04:59","modified_gmt":"2009-08-26T17:04:59","slug":"net-download-library-taking-form","status":"publish","type":"post","link":"https:\/\/www.entropywins.wtf\/blog\/2009\/08\/26\/net-download-library-taking-form\/","title":{"rendered":".Net download library taking form"},"content":{"rendered":"<p>Today did quite some work on .Net download library, the successor to my current FileDownloader class.<\/p>\n<p>I started off with finishing the protocol provider code (<a href=\"http:\/\/download-lib.svn.sourceforge.net\/viewvc\/download-lib?view=rev&amp;revision=4\" target=\"_blank\">see revision 4<\/a>), and then went on adding a lot of the still missing stuff to the <a href=\"http:\/\/download-lib.svn.sourceforge.net\/viewvc\/download-lib\/DownloadLib\/Downloader\/Classes\/Download.vb?view=markup&amp;pathrev=5\" target=\"_blank\">Download<\/a> class (<a href=\"http:\/\/download-lib.svn.sourceforge.net\/viewvc\/download-lib?view=rev&amp;revision=5\" target=\"_blank\">see revision 5<\/a>), which now counts almost 800 lines of code. Most changes I made are pretty much C# to VB.Net translation from <a href=\"http:\/\/www.codeproject.com\/KB\/IP\/MyDownloader.aspx\" target=\"_blank\">MyDownloader<\/a>, one of the projects I&#8217;m basing this library upon. Doing this translating also comes with the challenges of leaving out code that&#8217;s not needed (for example a hook system for protocol providers), holding into account all the name changes I&#8217;ve made, and at some points revising the logic layout of the code, since I don&#8217;t agree with the original design. I also had some great fun with working with SyncLock statements and interfaces.<\/p>\n<p>Although the project is still far from a first release, the basic structure is taking form, and I&#8217;m beginning to see where and how future features will need to be added \ud83d\ude42<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Today did quite some work on .Net download library, the successor to my current FileDownloader class. I started off with&hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[7],"tags":[9,62,80,167,181,239,273],"class_list":["post-349","post","type-post","status-publish","format-standard","hentry","category-programming","tag-net","tag-class-lirary","tag-downloadlib","tag-multithreading","tag-open-source","tag-sourceforge","tag-vb"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>.Net download library taking form - Blog of Jeroen De Dauw<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.entropywins.wtf\/blog\/2009\/08\/26\/net-download-library-taking-form\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\".Net download library taking form - Blog of Jeroen De Dauw\" \/>\n<meta property=\"og:description\" content=\"Today did quite some work on .Net download library, the successor to my current FileDownloader class. I started off with&hellip;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.entropywins.wtf\/blog\/2009\/08\/26\/net-download-library-taking-form\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog of Jeroen De Dauw\" \/>\n<meta property=\"article:published_time\" content=\"2009-08-26T17:04:59+00:00\" \/>\n<meta name=\"author\" content=\"Jeroen\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@https:\/\/twitter.com\/JeroenDeDauw\" \/>\n<meta name=\"twitter:site\" content=\"@JeroenDeDauw\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jeroen\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2009\\\/08\\\/26\\\/net-download-library-taking-form\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2009\\\/08\\\/26\\\/net-download-library-taking-form\\\/\"},\"author\":{\"name\":\"Jeroen\",\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/#\\\/schema\\\/person\\\/4e2ef14f2ca7dc3a0ac137d1692b66b7\"},\"headline\":\".Net download library taking form\",\"datePublished\":\"2009-08-26T17:04:59+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2009\\\/08\\\/26\\\/net-download-library-taking-form\\\/\"},\"wordCount\":180,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/#\\\/schema\\\/person\\\/4e2ef14f2ca7dc3a0ac137d1692b66b7\"},\"keywords\":[\".Net\",\"Class lirary\",\"DownloadLib\",\"Multithreading\",\"Open Source\",\"SourceForge\",\"VB\"],\"articleSection\":[\"Programming\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2009\\\/08\\\/26\\\/net-download-library-taking-form\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2009\\\/08\\\/26\\\/net-download-library-taking-form\\\/\",\"url\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2009\\\/08\\\/26\\\/net-download-library-taking-form\\\/\",\"name\":\".Net download library taking form - Blog of Jeroen De Dauw\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/#website\"},\"datePublished\":\"2009-08-26T17:04:59+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2009\\\/08\\\/26\\\/net-download-library-taking-form\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2009\\\/08\\\/26\\\/net-download-library-taking-form\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2009\\\/08\\\/26\\\/net-download-library-taking-form\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\".Net download library taking form\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/\",\"name\":\"Entropy Wins\",\"description\":\"A blog on Software Architecture, Design and Craftsmanship\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/#\\\/schema\\\/person\\\/4e2ef14f2ca7dc3a0ac137d1692b66b7\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/#\\\/schema\\\/person\\\/4e2ef14f2ca7dc3a0ac137d1692b66b7\",\"name\":\"Jeroen\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g\",\"caption\":\"Jeroen\"},\"logo\":{\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g\"},\"sameAs\":[\"https:\\\/\\\/www.linkedin.com\\\/in\\\/jeroendedauw\\\/\",\"https:\\\/\\\/x.com\\\/https:\\\/\\\/twitter.com\\\/JeroenDeDauw\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":".Net download library taking form - Blog of Jeroen De Dauw","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.entropywins.wtf\/blog\/2009\/08\/26\/net-download-library-taking-form\/","og_locale":"en_US","og_type":"article","og_title":".Net download library taking form - Blog of Jeroen De Dauw","og_description":"Today did quite some work on .Net download library, the successor to my current FileDownloader class. I started off with&hellip;","og_url":"https:\/\/www.entropywins.wtf\/blog\/2009\/08\/26\/net-download-library-taking-form\/","og_site_name":"Blog of Jeroen De Dauw","article_published_time":"2009-08-26T17:04:59+00:00","author":"Jeroen","twitter_card":"summary_large_image","twitter_creator":"@https:\/\/twitter.com\/JeroenDeDauw","twitter_site":"@JeroenDeDauw","twitter_misc":{"Written by":"Jeroen","Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.entropywins.wtf\/blog\/2009\/08\/26\/net-download-library-taking-form\/#article","isPartOf":{"@id":"https:\/\/www.entropywins.wtf\/blog\/2009\/08\/26\/net-download-library-taking-form\/"},"author":{"name":"Jeroen","@id":"https:\/\/www.entropywins.wtf\/blog\/#\/schema\/person\/4e2ef14f2ca7dc3a0ac137d1692b66b7"},"headline":".Net download library taking form","datePublished":"2009-08-26T17:04:59+00:00","mainEntityOfPage":{"@id":"https:\/\/www.entropywins.wtf\/blog\/2009\/08\/26\/net-download-library-taking-form\/"},"wordCount":180,"commentCount":1,"publisher":{"@id":"https:\/\/www.entropywins.wtf\/blog\/#\/schema\/person\/4e2ef14f2ca7dc3a0ac137d1692b66b7"},"keywords":[".Net","Class lirary","DownloadLib","Multithreading","Open Source","SourceForge","VB"],"articleSection":["Programming"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.entropywins.wtf\/blog\/2009\/08\/26\/net-download-library-taking-form\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.entropywins.wtf\/blog\/2009\/08\/26\/net-download-library-taking-form\/","url":"https:\/\/www.entropywins.wtf\/blog\/2009\/08\/26\/net-download-library-taking-form\/","name":".Net download library taking form - Blog of Jeroen De Dauw","isPartOf":{"@id":"https:\/\/www.entropywins.wtf\/blog\/#website"},"datePublished":"2009-08-26T17:04:59+00:00","breadcrumb":{"@id":"https:\/\/www.entropywins.wtf\/blog\/2009\/08\/26\/net-download-library-taking-form\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.entropywins.wtf\/blog\/2009\/08\/26\/net-download-library-taking-form\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.entropywins.wtf\/blog\/2009\/08\/26\/net-download-library-taking-form\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.entropywins.wtf\/blog\/"},{"@type":"ListItem","position":2,"name":".Net download library taking form"}]},{"@type":"WebSite","@id":"https:\/\/www.entropywins.wtf\/blog\/#website","url":"https:\/\/www.entropywins.wtf\/blog\/","name":"Entropy Wins","description":"A blog on Software Architecture, Design and Craftsmanship","publisher":{"@id":"https:\/\/www.entropywins.wtf\/blog\/#\/schema\/person\/4e2ef14f2ca7dc3a0ac137d1692b66b7"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.entropywins.wtf\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.entropywins.wtf\/blog\/#\/schema\/person\/4e2ef14f2ca7dc3a0ac137d1692b66b7","name":"Jeroen","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g","caption":"Jeroen"},"logo":{"@id":"https:\/\/secure.gravatar.com\/avatar\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g"},"sameAs":["https:\/\/www.linkedin.com\/in\/jeroendedauw\/","https:\/\/x.com\/https:\/\/twitter.com\/JeroenDeDauw"]}]}},"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p74TBF-5D","jetpack-related-posts":[{"id":351,"url":"https:\/\/www.entropywins.wtf\/blog\/2009\/08\/27\/downloadmanager-class\/","url_meta":{"origin":349,"position":0},"title":"DownloadManager class","author":"Jeroen","date":"2009-08-27","format":false,"excerpt":"Today I again did some work on my .Net download library project. I added some stuff to the main class, Download, and also created the base of the DownloadManager class. This class will allow you to work with multiple downloads at once, by putting them in a list, and providing\u2026","rel":"","context":"In &quot;Programming&quot;","block_context":{"text":"Programming","link":"https:\/\/www.entropywins.wtf\/blog\/category\/programming\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":622,"url":"https:\/\/www.entropywins.wtf\/blog\/2009\/12\/21\/net-download-library-the-first-results\/","url_meta":{"origin":349,"position":1},"title":".Net Download Library: the first results","author":"Jeroen","date":"2009-12-21","format":false,"excerpt":"Over the last few days, I've done some work on .Net download library, the successor to my FileDownloader class. I started working on this project about half a year ago, and had quite some difficulties picking up the thread again after GSoC 2009, since I was in the middle of\u2026","rel":"","context":"In &quot;Programming&quot;","block_context":{"text":"Programming","link":"https:\/\/www.entropywins.wtf\/blog\/category\/programming\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":441,"url":"https:\/\/www.entropywins.wtf\/blog\/2009\/09\/22\/class-typehashtable\/","url_meta":{"origin":349,"position":2},"title":"Class TypeHashTable","author":"Jeroen","date":"2009-09-22","format":false,"excerpt":"While working on the Download class of the .Net Download Library yesterday, I came across the need to add and retrieve items from a HashTable of a fixed type. After asking at MSDN forums, someone suggested creating for example a StringHashTable, which then contains a number of Shadow methods that\u2026","rel":"","context":"In &quot;Programming&quot;","block_context":{"text":"Programming","link":"https:\/\/www.entropywins.wtf\/blog\/category\/programming\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":382,"url":"https:\/\/www.entropywins.wtf\/blog\/2009\/09\/04\/event-based-asynchronous-pattern\/","url_meta":{"origin":349,"position":3},"title":"Event-based Asynchronous Pattern","author":"Jeroen","date":"2009-09-04","format":false,"excerpt":"While working on .Net download library, I realized I still didn't know how to fire events from the background threads onto the main thread (meaning the thread that started the download by calling Start). I posted query on how to do this in vb.net on several forums, and got some\u2026","rel":"","context":"In &quot;Programming&quot;","block_context":{"text":"Programming","link":"https:\/\/www.entropywins.wtf\/blog\/category\/programming\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":438,"url":"https:\/\/www.entropywins.wtf\/blog\/2009\/09\/21\/first-true-multithreading-event\/","url_meta":{"origin":349,"position":4},"title":"First true multithreading event","author":"Jeroen","date":"2009-09-21","format":false,"excerpt":"Today I was able to do some work on the .Net Download library project. I mainly focused on the cross thread event handling, on which I've been busy for quite a while now. Thanks to some helpful docs on MSDN, I now have a working implementation, that successfully fires events\u2026","rel":"","context":"With 2 comments","block_context":{"text":"With 2 comments","link":"https:\/\/www.entropywins.wtf\/blog\/2009\/09\/21\/first-true-multithreading-event\/#comments"},"img":{"alt_text":"Breakpoint successfully triggered after cross thread fired event","src":"https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2009\/09\/eventWin.gif?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2009\/09\/eventWin.gif?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2009\/09\/eventWin.gif?resize=525%2C300&ssl=1 1.5x"},"classes":[]},{"id":1127,"url":"https:\/\/www.entropywins.wtf\/blog\/2013\/07\/14\/parserhooks-declarative-oop-api-for-mediawiki-released\/","url_meta":{"origin":349,"position":5},"title":"ParserHooks declarative OOP API for MediaWiki released","author":"Jeroen","date":"2013-07-14","format":false,"excerpt":"Yes, there now is a nice OOP API that allows you to create MediaWiki parser hooks in declarative fashion! A few years back, I was sitting in c-base after the 27th Chaos Communication Congress had ended. I decided to quickly hack up a decent SubPageList extension for MediaWiki on top\u2026","rel":"","context":"With 1 comment","block_context":{"text":"With 1 comment","link":"https:\/\/www.entropywins.wtf\/blog\/2013\/07\/14\/parserhooks-declarative-oop-api-for-mediawiki-released\/#comments"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/posts\/349","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/comments?post=349"}],"version-history":[{"count":0,"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/posts\/349\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/media?parent=349"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/categories?post=349"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/tags?post=349"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}