February 2006 - Posts

Holy Schnikeys!

Someone has actually built a plugin for PostXING! Ladies and gentlemen, Allow me to introduce the TechnoratiTagger plugin for PostXING! Unfortunately, I'm not 100% sure who wrote it (well, it's not obvious from the site). The good news is...it works! :) It even works with the spankin new, begging to be released v2 beta I have on my machine, and it works well!

Technorati Tags:       

Here's a link to the hotfix for the winforms designer error that looks like this:

One or more errors encountered while loading the designer. The errors are listed below. Some errors can be fixed by rebuilding your project, while others may require code changes. TypeLoad failure. Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information.

at System.Reflection.Module.GetTypesInternal(StackCrawlMark& stackMark)
at System.Reflection.Assembly.GetTypes()
at Microsoft.VisualStudio.Shell.Design.AssemblyObsoleteEventArgs..ctor(Assembly assembly)
at Microsoft.VisualStudio.Design.VSDynamicTypeService.ReloadAssemblyIfChanged(String codeBase)
at Microsoft.VisualStudio.Design.VSDynamicTypeService.CreateDynamicAssembly(String codeBase)
at Microsoft.VisualStudio.Design.VSTypeResolutionService.AssemblyEntry.get_Assembly()
at Microsoft.VisualStudio.Design.VSTypeResolutionService.AssemblyEntry.Search(String fullName, String typeName, Boolean ignoreTypeCase, Assembly& assembly, String description)
at Microsoft.VisualStudio.Design.VSTypeResolutionService.SearchProjectEntries(AssemblyName assemblyName, String typeName, Boolean ignoreTypeCase, Assembly& assembly)
at Microsoft.VisualStudio.Design.VSTypeResolutionService.GetType(String typeName, Boolean throwOnError, Boolean ignoreCase, ReferenceType refType)
at Microsoft.VisualStudio.Design.Serialization.CodeDom.AggregateTypeResolutionService.GetType(String name, Boolean throwOnError, Boolean ignoreCase)
at Microsoft.VisualStudio.Design.Serialization.CodeDom.AggregateTypeResolutionService.GetType(String name, Boolean throwOnError)
at System.ComponentModel.Design.Serialization.CodeDomSerializerBase.GetType(ITypeResolutionService trs, String name, Dictionary`2 names)
at System.ComponentModel.Design.Serialization.CodeDomSerializerBase.FillStatementTable(IDesignerSerializationManager manager, IDictionary table, Dictionary`2 names, CodeStatementCollection statements, String className)
at System.ComponentModel.Design.Serialization.TypeCodeDomSerializer.Deserialize(IDesignerSerializationManager manager, CodeTypeDeclaration declaration)
at System.ComponentModel.Design.Serialization.CodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager manager)
at Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager serializationManager)
at Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomDesignerLoader.DeferredLoadHandler.Microsoft.VisualStudio.TextManager.Interop.IVsTextBufferDataEvents.OnLoadCompleted(Int32 fReload)

I've been wanting to setup subversion for PostXING for a while so I can have more control over who has commit access and various adminy tasks that are only available thru emailing the already busy staff of sourcegear when hosting code on vaultpub.

Thankfully, I'm not the only person who has had this idea. To that end, this blog post was instrumental in outlining the steps to take to get subversion up and running on a windows box. The only issue that I had which was rather annoying was I kept getting an error stating that svn was "unable to open an ra_local session to URL" when trying to import code on the host. So, I did things the painfully slow way of adding files/folders from a client machine that already had the code on it. The good news is that PostXING now has its own subversion repository: svn://postxing.net/PostXING read access is still there for all, but now I can specify who can and cannot commit changes. So nice.

This is a private boolean member of the new BackgroundWorker class in .NET 2.0. If it were public, perhaps there would be less questions like this one on the gotdotnet messageboards. I ran into a similar problem recently and decided that instead of catching an exception when the BackgroundWorker is running, I would emulate the isRunning member myself.

Since this is multithreaded by its nature, I decided to use a lock object to control access to a static boolean member in the class that uses the BackgroundWorker component.

static bool isRunningBgWorker = false;
static object lockObj = new object();

...

if (!isRunningBgWorker) {
	this.backgroundWorker1.RunWorkerAsync();
}

I check to see if it's running before even setting it off to do the work.

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) {
	lock (lockObj) {
		isRunningBgWorker = true;
	}

The first thing that happens when the DoWork eventhandler is called and

private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) {
...

	lock (lockObj) {
		isRunningBgWorker = false;
	}
}

the last thing when the work is completed: controlled access to the isRunningBgWorker member. Hope this helps somebody else out there who is having trouble with the BackgroundWorker component.

More Posts