<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>dougzuck.com &#187; C#.NET</title>
	<atom:link href="http://dougzuck.com/category/technology/csharp/feed" rel="self" type="application/rss+xml" />
	<link>http://dougzuck.com</link>
	<description>A place to put some stuff...</description>
	<lastBuildDate>Sun, 25 Jul 2010 19:48:42 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=abc</generator>
		<item>
		<title>Remote Reboot X &#8211; The Ultimate WSUS Companion Tool &#8211; Version 1.5 Available Now</title>
		<link>http://dougzuck.com/remote-reboot-x-the-ultimate-wsus-companion-tool-version-1-5-available-now</link>
		<comments>http://dougzuck.com/remote-reboot-x-the-ultimate-wsus-companion-tool-version-1-5-available-now#comments</comments>
		<pubDate>Fri, 02 Oct 2009 23:22:57 +0000</pubDate>
		<dc:creator>doug</dc:creator>
				<category><![CDATA[C#.NET]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[C sharp]]></category>
		<category><![CDATA[Remote Reboot]]></category>
		<category><![CDATA[Windows updates]]></category>
		<category><![CDATA[WSUS]]></category>

		<guid isPermaLink="false">http://dougzuck.com/?p=707</guid>
		<description><![CDATA[Download it here:  http://dougzuck.com/remoterebootx Along with bug fixes and cosmetic changes, here are some of the features that have been added: Automatically reboot if required after installing WSUS updates Automatically force reboot if normal reboot fails Automatically stop pinging after reboot In addition to installing downloaded updates you can now specify to search for available [...]]]></description>
			<content:encoded><![CDATA[<p>Download it here:  <a href="http://dougzuck.com/remoterebootx" target="_self">http://dougzuck.com/remoterebootx</a></p>
<p>Along with bug fixes and cosmetic changes, here are some of the features that have been added:</p>
<ul>
<li>Automatically reboot if required after installing WSUS updates</li>
<li>Automatically force reboot if normal reboot fails</li>
<li>Automatically stop pinging after reboot</li>
<li>In addition to installing downloaded updates you can now specify to search for available updates, then download and install them all with a single click</li>
<li>Save and load state (XML import/export)</li>
<li>Wake On LAN</li>
</ul>
<p style="text-align: center;"><a href="http://dougzuck.com/wp-content/uploads/2009/05/rrx20091013.png"><img class="aligncenter size-full wp-image-743" title="rrx20091013" src="http://dougzuck.com/wp-content/uploads/2009/05/rrx20091013.png" alt="rrx20091013" width="540" height="315" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://dougzuck.com/remote-reboot-x-the-ultimate-wsus-companion-tool-version-1-5-available-now/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>C# .NET &#8211; UI Threading Example</title>
		<link>http://dougzuck.com/c-ui-threading-example</link>
		<comments>http://dougzuck.com/c-ui-threading-example#comments</comments>
		<pubDate>Sun, 14 Jun 2009 22:14:30 +0000</pubDate>
		<dc:creator>doug</dc:creator>
				<category><![CDATA[C#.NET]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[threading]]></category>
		<category><![CDATA[ui]]></category>

		<guid isPermaLink="false">http://www.dougzuck.com/?p=396</guid>
		<description><![CDATA[This is the simplest way to execute work in a separate thread and have it report back to the UI thread When you&#8217;re creating a Windows Form Application using Visual C# 2008, there are some tricky threading issues that need to be dealt with in order to keep your application running smoothly.  Specifically, you have [...]]]></description>
			<content:encoded><![CDATA[<h2>This is the simplest way to execute work in a separate thread and have it report back to the UI thread</h2>
<p>When you&#8217;re creating a Windows Form Application using Visual C# 2008, there are some tricky threading issues that need to be dealt with in order to keep your application running smoothly.  Specifically, you have to be very aware of how your application does work.  If you simply create a worker function and then call it, it&#8217;s going to execute in the current thread, which is also the thread that&#8217;s handling the user interface.  The result really stinks because your UI will completely lock up until the worker thread is finished executing.  This is unacceptable in nearly all situations.</p>
<p>I want to show you what I believe is the absolute simplest way for executing a worker function in a separate thread while still allowing that separate thread to send information back to the main UI thread, whether it be to update a text box, a label, or a field in a datagridview.</p>
<p>In this example we&#8217;re going to click a button to launch our worker function, which will count from 1 to 15.  Our user interface will display each number as it counts.  </p>
<p>Also, please pardon the fact that I use &#8216;function&#8217; and &#8216;method&#8217; interchangeably in this post.  Technically, I should just be saying &#8216;method,&#8217; but &#8216;function&#8217; always slips out.</p>
<p>Download the entire Visual Studio project here: <a href="http://dougzuck.com/downloads/UI_Threading_Example.zip">UI_Threading_Example_CSharp.zip</a></p>
<p><a href="http://www.dougzuck.com/wp-content/uploads/2009/06/UI_Threading_Example.png"><img class="size-full wp-image-409 alignnone" title="UI_Threading_Example" src="http://www.dougzuck.com/wp-content/uploads/2009/06/UI_Threading_Example.png" alt="UI_Threading_Example" width="249" height="125" /></a><a href="http://www.dougzuck.com/wp-content/uploads/2009/06/UI_Threading_Example2.png"><img class="alignnone size-full wp-image-449" title="UI_Threading_Example(2)" src="http://www.dougzuck.com/wp-content/uploads/2009/06/UI_Threading_Example2.png" alt="UI_Threading_Example(2)" width="251" height="127" /></a></p>
<h3>Let&#8217;s take a look at the code:</h3>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">using</span> <span style="color: #008080;">System</span><span style="color: #008000;">;</span>
<span style="color: #0600FF;">using</span> <span style="color: #008080;">System.Windows.Forms</span><span style="color: #008000;">;</span>
<span style="color: #0600FF;">using</span> <span style="color: #008080;">System.Threading</span><span style="color: #008000;">;</span>
&nbsp;
<span style="color: #0600FF;">namespace</span> UI_Threading_Example
<span style="color: #000000;">&#123;</span>
    <span style="color: #008080; font-style: italic;">//declare the delegate that we'll use to launch our worker function in a separate thread</span>
    <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">delegate</span> <span style="color: #0600FF;">void</span> workerFunctionDelegate<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> totalSeconds<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
    <span style="color: #008080; font-style: italic;">//declare the delegate that we'll use to call the function that displays text in our text box</span>
    <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">delegate</span> <span style="color: #0600FF;">void</span> poplateTextBoxDelegate<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">string</span> text<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
    <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">partial</span> <span style="color: #FF0000;">class</span> Form1 <span style="color: #008000;">:</span> Form
    <span style="color: #000000;">&#123;</span>
       <span style="color: #0600FF;">public</span> Form1<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
       <span style="color: #000000;">&#123;</span>
          InitializeComponent<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
       <span style="color: #000000;">&#125;</span>
&nbsp;
       <span style="color: #008080; font-style: italic;">//this function will simply write text to our text box</span>
       <span style="color: #008080; font-style: italic;">//this function will later be called from a worker thread through the use of a delegate using the Invoke method on the form</span>
       <span style="color: #0600FF;">void</span> populateTextBox<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">string</span> text<span style="color: #000000;">&#41;</span>
       <span style="color: #000000;">&#123;</span>
          textBox1.<span style="color: #0000FF;">Text</span> <span style="color: #008000;">=</span> textBox1.<span style="color: #0000FF;">Text</span> <span style="color: #008000;">+</span> <span style="color: #666666;">&quot; &quot;</span> <span style="color: #008000;">+</span> text<span style="color: #008000;">;</span>
       <span style="color: #000000;">&#125;</span>
&nbsp;
       <span style="color: #008080; font-style: italic;">//this function simulates &quot;work&quot; by simply counting from 1 to totalSeconds</span>
       <span style="color: #0600FF;">void</span> workerFunction<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> totalSeconds<span style="color: #000000;">&#41;</span>
       <span style="color: #000000;">&#123;</span>
          <span style="color: #0600FF;">for</span> <span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> count <span style="color: #008000;">=</span> <span style="color: #FF0000;">1</span><span style="color: #008000;">;</span> count <span style="color: #008000;">&lt;=</span> totalSeconds <span style="color: #008000;">;</span> count<span style="color: #008000;">++</span><span style="color: #000000;">&#41;</span>
          <span style="color: #000000;">&#123;</span>
             <span style="color: #008080; font-style: italic;">//we use this.Invoke to send information back to our UI thread with a delegate</span>
             <span style="color: #008080; font-style: italic;">//if we were to try to access the text box on the UI thread directly from a different thread, there would be problems</span>
             <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">Invoke</span><span style="color: #000000;">&#40;</span><span style="color: #008000;">new</span> poplateTextBoxDelegate<span style="color: #000000;">&#40;</span>populateTextBox<span style="color: #000000;">&#41;</span>, <span style="color: #008000;">new</span> <span style="color: #FF0000;">object</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">&#93;</span> <span style="color: #000000;">&#123;</span> count.<span style="color: #0000FF;">ToString</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#125;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
             Thread.<span style="color: #0000FF;">Sleep</span><span style="color: #000000;">&#40;</span><span style="color: #FF0000;">1000</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
          <span style="color: #000000;">&#125;</span>
       <span style="color: #000000;">&#125;</span>   
&nbsp;
       <span style="color: #008080; font-style: italic;">//this function is executed when we click the first button in the windows form</span>
       <span style="color: #008080; font-style: italic;">//this is the PROPER WAY to do work in a UI situation</span>
       <span style="color: #008080; font-style: italic;">//the worker function is launched in a separate thread so that our UI will remain responsive while it does work</span>
       <span style="color: #0600FF;">private</span> <span style="color: #0600FF;">void</span> buttonNewThread_Click<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">object</span> sender, EventArgs e<span style="color: #000000;">&#41;</span>
       <span style="color: #000000;">&#123;</span>
          workerFunctionDelegate w <span style="color: #008000;">=</span> workerFunction<span style="color: #008000;">;</span>
          w.<span style="color: #0000FF;">BeginInvoke</span><span style="color: #000000;">&#40;</span><span style="color: #FF0000;">15</span>, <span style="color: #0600FF;">null</span>, <span style="color: #0600FF;">null</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
       <span style="color: #000000;">&#125;</span>
&nbsp;
       <span style="color: #008080; font-style: italic;">//this function is executed when we click the second button in the windows form</span>
       <span style="color: #008080; font-style: italic;">//it's an example of WHAT NOT TO DO because if we click this button</span>
       <span style="color: #008080; font-style: italic;">//the UI will become completely unresponsive for 15 seconds while the worker fucntion is executed</span>
       <span style="color: #0600FF;">private</span> <span style="color: #0600FF;">void</span> buttonCurrentThread_Click<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">object</span> sender, EventArgs e<span style="color: #000000;">&#41;</span>
       <span style="color: #000000;">&#123;</span>
          workerFunction<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">15</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
       <span style="color: #000000;">&#125;</span>
 <span style="color: #000000;">&#125;</span></pre></td></tr></table></div>

<p>OK, so here&#8217;s what we&#8217;ve got.  In Visual Studio (I&#8217;m using Visual C# 2008) I&#8217;ve created a new Windows Form Application and then in the designer window I added a text box (called textBox1) plus two buttons (called buttonNewThread and buttonCurrentThread).</p>
<p>In the code window I created two functions:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">void</span> populateTextBox<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">string</span> text<span style="color: #000000;">&#41;</span>
<span style="color: #0600FF;">void</span> workerFunction<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> totalSeconds<span style="color: #000000;">&#41;</span></pre></td></tr></table></div>

<p>plus a delegate for each function:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">public</span> <span style="color: #FF0000;">delegate</span> <span style="color: #0600FF;">void</span> poplateTextBoxDelegate<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">string</span> text<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #0600FF;">public</span> <span style="color: #FF0000;">delegate</span> <span style="color: #0600FF;">void</span> workerFunctionDelegate<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> totalSeconds<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span></pre></td></tr></table></div>

<p>The first function is responsible for writing text to our text box.  The second function is responsible for doing &#8220;work,&#8221; which in this case is just counting from 1 to 15 and calling the function (using a delegate) to display the count in our text box.  Additionally there are two other functions (buttonCurrentThread_Click and buttonNewThread_Click) which handle the button clicks from our UI:</p>
<h3>What&#8217;s the deal with delegates in this example?</h3>
<p>In order to launch a worker function in a separate thread we have to declare a delegate for that function.  The delegate declaration must be outside the class declaration, and the delegate for each function must have the same format as the function that it&#8217;s going to be used to call.  So for example, if your worker function has 3 parameters, your delegate must also have 3 parameters.  And in this example, we not only need a delegate to handle launching our worker function in a new thread, but we also need to declare a delegate that we&#8217;ll use from within the worker thread to call a function to update the text box on the UI thread.  It is NOT ok to try to update a text box in the UI from a different thread without the use of a delegate.  If you don&#8217;t believe me then give it a shot and you&#8217;ll see for yourself that the results are funky.</p>
<h3>The WRONG way to execute the worker function (using the UI thread)</h3>
<p>When you click the button to execute the worker function in the current thread, which is the same thread that handles the UI, then you&#8217;ll see that for 15 seconds you can&#8217;t do anything with the UI or even move the form window to a new location.  At the end of 15 seconds the UI becomes responsive again and you see a &#8220;15&#8243; in the text box.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #008080; font-style: italic;">//This is the WRONG way to do it</span>
<span style="color: #0600FF;">private</span> <span style="color: #0600FF;">void</span> buttonCurrentThread_Click<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">object</span> sender, EventArgs e<span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
   workerFunction<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">15</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #000000;">&#125;</span></pre></td></tr></table></div>

<h3>The RIGHT way to execute the worker function (using a separate thread)</h3>
<p>When you click the button to execute the worker function in a new thread, you watch the count from 1 to 15 displayed in the text box and the UI is not frozen.</p>
<p>Note that the null values are required by the BeginInvoke method.  If you have a function that requires more than one parameter, you would still pass all your parameters in first, followed by the two nulls.  In this example we&#8217;re effectively passing the value 15 to the worker function which will then execute for 15 seconds.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #008080; font-style: italic;">//This is the RIGHT way to do it</span>
<span style="color: #0600FF;">private</span> <span style="color: #0600FF;">void</span> buttonNewThread_Click<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">object</span> sender, EventArgs e<span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
   workerFunctionDelegate w <span style="color: #008000;">=</span> workerFunction<span style="color: #008000;">;</span>
   w.<span style="color: #0000FF;">BeginInvoke</span><span style="color: #000000;">&#40;</span><span style="color: #FF0000;">15</span>, <span style="color: #0600FF;">null</span>, <span style="color: #0600FF;">null</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #000000;">&#125;</span></pre></td></tr></table></div>

<h3>The proper way to update the text box in the UI from the worker thread using the Invoke method of the main form</h3>
<p>The format can definitely get a little confusing, but hopefully you can follow along and mimic it for your application.  Instead of accessing the text box directly from the worker thread, which will cause problems, we instead invoke a method (using a delegate) that accesses the text box.  Note that our populateTextBox function has one parameter, which is a string.  We want to write the current count to the text box using that function, so we have to convert it to a string.  If we were passing multiple variables to the populateTextBox function, the format would still look the same, and we&#8217;d simply separate the variables inside the curly braces by a comma.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #008080; font-style: italic;">//update the text box by using a delegate to call a function on the UI thread that will do the update</span>
<span style="color: #0600FF;">void</span> workerFunction<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> totalSeconds<span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
   <span style="color: #0600FF;">for</span> <span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> count <span style="color: #008000;">=</span> <span style="color: #FF0000;">1</span><span style="color: #008000;">;</span> count <span style="color: #008000;">&lt;=</span> totalSeconds <span style="color: #008000;">;</span> count<span style="color: #008000;">++</span><span style="color: #000000;">&#41;</span>
      <span style="color: #000000;">&#123;</span>
         <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">Invoke</span><span style="color: #000000;">&#40;</span><span style="color: #008000;">new</span> poplateTextBoxDelegate<span style="color: #000000;">&#40;</span>populateTextBox<span style="color: #000000;">&#41;</span>, <span style="color: #008000;">new</span> <span style="color: #FF0000;">object</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">&#93;</span> <span style="color: #000000;">&#123;</span> count.<span style="color: #0000FF;">ToString</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#125;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
         Thread.<span style="color: #0000FF;">Sleep</span><span style="color: #000000;">&#40;</span><span style="color: #FF0000;">1000</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
      <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://dougzuck.com/c-ui-threading-example/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Remote Reboot X &#8211; The WSUS Companion Tool &#8211; Install Windows Updates and Reboot LOTS of Machines Remotely with Real-Time Status Monitoring</title>
		<link>http://dougzuck.com/remote-reboot-the-way-to-reboot-lots-of-computer-simultaneously</link>
		<comments>http://dougzuck.com/remote-reboot-the-way-to-reboot-lots-of-computer-simultaneously#comments</comments>
		<pubDate>Fri, 12 Jun 2009 01:55:19 +0000</pubDate>
		<dc:creator>doug</dc:creator>
				<category><![CDATA[C#.NET]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Remote Reboot]]></category>
		<category><![CDATA[Windows updates]]></category>
		<category><![CDATA[WSUS]]></category>

		<guid isPermaLink="false">http://www.dougzuck.com/?p=387</guid>
		<description><![CDATA[The newest version of Remote Reboot X is now available here!  There is no app that can match the remote reboot capabilities of RemoteRebootX.  It will allow you to install WSUS updates and remotely reboot a very large number of computers simultaneously, while also being able to monitor their statuses. Remote Reboot X]]></description>
			<content:encoded><![CDATA[<p>The newest version of Remote Reboot X is now available <a href="http://dougzuck.com/remoterebootx" target="_self">here</a>!  There is no app that can match the remote reboot capabilities of RemoteRebootX.  It will allow you to install WSUS updates and remotely reboot a very large number of computers simultaneously, while also being able to monitor their statuses.</p>
<p><a href="http://dougzuck.com/remoterebootx" target="_self">Remote Reboot X</a></p>
<p style="text-align: center;"><a href="http://dougzuck.com/wp-content/uploads/2009/10/rrx1.5b.png"><img class="aligncenter size-full wp-image-701" title="rrx1.5b" src="http://dougzuck.com/wp-content/uploads/2009/10/rrx1.5b.png" alt="rrx1.5b" width="550" height="322" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://dougzuck.com/remote-reboot-the-way-to-reboot-lots-of-computer-simultaneously/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
