Search Results

Search found 20360 results on 815 pages for 'capture output'.

Page 345/815 | < Previous Page | 341 342 343 344 345 346 347 348 349 350 351 352  | Next Page >

  • Why are KDE components being installed/updated on 12.04 with GNOME?

    - by Dune
    I am not yet fully versed with the components installed by default on my machine, so I will apologize in advance if my question is silly. shows that a lot many of (what I assume are) KDE components (libk*, kde*, etc.) are being installed/updated on my machine. That is just the output from sudo apt-fast update && sudo apt-fast dist-upgrade -y from a few minutes ago. Can anyone tell me why? Can I safely remove them? If yes, how? Thanks in advance for any replies. System specs: Fully updated Ubuntu 12.04 x86_64 w/kernel3.4, Gnome, Unity, Core2Duo, 4GB

    Read the article

  • Can an object oriented program be seen as a Finite State Machine?

    - by Peretz
    This might be a philosophical/fundamental question, but I just want to clarify it. In my understanding a Finite State Machine is a way of modeling a system in which the system's output will not only depend on the current inputs, but also the current state of the system. Additionally, as the name suggests it, a finite state machine can be segmented in a finite N number of states with its respective state and behavior. If this is correct, shouldn't every single object with data and function members be a state in our object oriented model, making any object oriented design a finite state machine? If that is not the interpretation of a FSM in object design, what exactly people mean when they implement a FSM in software? am I missing something? Thanks

    Read the article

  • How to merge two .iso images

    - by pgrytdal
    I am following this tutorial to install Android onto my computer VIA Virtual Box. My problem is, they want you to download liveandroidv0.3.iso.001 liveandroidv0.3.iso.002 then they want you to merge these two files with cat liveandroidv0.3.iso.001 liveandroidv0.3.iso.002 > liveandroidv0.3.iso in the Terminal. The problem is, when I run the command, I get the following output cat liveandroidv0.3.iso.001 liveandroidv0.3.iso.002 > liveandroidv0.3.iso cat: liveandroidv0.3.iso.001: No such file or directory cat: liveandroidv0.3.iso.002: No such file or directory So, I was wondering if there was an alternative way to merge these files? Or if you guy's could help me merge them this way? Extra info: OS: Ubuntu 12.10 I downloaded the files to my /downloads folder in my home directory.

    Read the article

  • Very heavy .PDF file. How to handle it?

    - by Luigi
    I should print this file on paper, but it is heavy (2,3 MB) and the printing process is very slow. But this is not the whole problem. I should first create another .pdf file (grayscale) with four pages on each sheet. When I try to print this file as a .pdf file, the process of creation of the new file is even slower than the printing process, and the output file is much heavier than the original (hundreds of megabytes). How can I shrink the pdf file? Is there a way to create a printer friendly .pdf version of the file? Before you ask, I can't simply print it on pages. I must create this .pdf file with four pages on each sheet.

    Read the article

  • How can I convert .mp4 files to .3gp using ffmpeg?

    - by harisibrahimkv
    I would like to download a few videos from youtube and convert them to 3gp so that I can play them on my phone. I would like to know how this can be done using ffmpeg. I tried the various results on the net only to get the following errors. I used: ffmpeg -i dil.mp4 -sameq -ab 64k -ar 44100 dilenada.3gp I got: Unsupported codec for output stream #0.1 Seems stream 0 codec frame rate differs from container frame rate: 2000.00 (2000/1) - 29.92 (359/12) I used: ffmpeg -y -i dil.mp4 -r 20 -s 352x288 -b 400k -acodec libfaac -ac 1 -ar 2000 -ab 24k dilenada.3gp I got: Seems stream 0 codec frame rate differs from container frame rate: 2000.00 (2000/1) -> 29.92 (359/12) Unknown encoder 'libfaac' What am I doing wrong?

    Read the article

  • Whenever I try to remove a Debian package I receive an Error

    - by Brenton Horne
    Whenever I type into the terminal the command: sudo dpkg -r '/home/brentonhorne/Downloads/virtualbox.deb' I receive the error: dpkg: error: --remove needs a valid package name but '/home/brentonhorne/Downloads/virtualbox.deb' is not: illegal package name in specifier '/home/brentonhorne/Downloads/virtualbox.deb': must start with an alphanumeric character Type dpkg --help for help about installing and deinstalling packages [*]; Use `dselect' or `aptitude' for user-friendly package management; Type dpkg -Dhelp for a list of dpkg debug flag values; Type dpkg --force-help for a list of forcing options; Type dpkg-deb --help for help about manipulating *.deb files; Options marked [*] produce a lot of output - pipe it through `less' or `more' ! How do I get around this problem?

    Read the article

  • Configure audio on HP ENVY 4 ultrabook

    - by phodu_insaan
    I want to configure audio for ubuntu 12.04 on my laptop. Currently the audio just does not play. If i try and plug in headphones then somewhere midway to being fully plugged in the audio plays on the headphones, I plug in further and the sound disappears. How do I get this to work? lspci | grep audio Audio device: Intel Corporation Panther Point High Definition Audio Controller My laptop is one the beats edition HP laptops, and the driver for win7 was an IDT HD audio driver. --EDIT-- The output for cat /proc/asound/card0/codec* | grep Codec is Codec: IDT 92HD91BXX Codec: Intel PantherPoint HDMI I need to get both the IDT card to work and the HDMI card to work with my TV. --EDIT-- --EDIT 2-- I have added blacklist snd-usb-audio to the end of the file /etc/modprobe.d/alsa-base.conf Now the sound plays from my laptop speakers only when I plug in a headphones/external speaker. Otherwise no sound. :( Please help getting everything working as it should. --EDIT 2-- Thanks

    Read the article

  • Dual Booting Windows 8 and Ubuntu 12.10 - thinkpad x230

    - by user110703
    I am having problems getting grub to load Windows 8 properly after installing Ubuntu 12.10 and Windows 8 on a solid state drive. Here's what I did: Fresh install of Windows 8 using USB recovery drive (partitioned SSD for UEFI) -- Tested windows install and it worked fine Built bootable USB with Ubuntu 12.10 64bit and installed Ubuntu -- Used Ubuntu's installer to partition the Windows 8 partition and install there Reboot - try to load windows 8 from grub -- Ubuntu loads correctly; windows load reports various problems with permissions and not being able to find files - I'll update what the actual errors are Tried to fix the boot problem using boot-repair: -- here's the output: http://paste.ubuntu.com/1384522/ So, this is my first time trying to setup a dual boot system and I think that UEFI is the main culprit in getting this to work correctly. What do I need to

    Read the article

  • Trace code pascal [on hold]

    - by mghaffari
    I haven't worked with Pascal so far, and my problem is understanding the recursive aspects that prm assignment operators and how the final (correct) value is derived. Would someone please explain that line for me. Program test(output); FUNCTION prm(az:integer) : real; begin if az = 1 then prm := sqrt(12) else prm := sqrt(12*prm(az-1)); end; begin writeln(prm(30):0:2); end.

    Read the article

  • How do I recover a .ogv on ext4?

    - by gsedej
    Hi! I have very a simple question. How to recover a .ogv file on my /home ext4 partition? I overwrote the .ogv file (I confused input and output in Arista transcoder). I did research. TestDisk can undelete files on FAT and NTFS, but not on EXT4. PhotoRec does not support .ogv recovering. Foremost also does not support .ogv More info: The file is located at: /home/gasper/Video/Webcam/2011-02-02-181200.ogv

    Read the article

  • Ripping MP3s in Rhythmbox Ubuntu 12.10 (64 bit)?

    - by James Fellows Yates
    I installed a couple of days ago Ubuntu 12.10 (64 bit). I today tried ripping a CD in the MP3 format. However, whenever I try to rip, it says it is missing an extra multimedia plugin "Gstreamer extra plug-ins (i386)". I then try to install the :i386 version of the gstreamer-ugly plugins, but then I get the same problem but with the id3-demuxer (or something similar) The Terminal output I get from both problems (but replace the "MPEG-1 Layer 3 (MP3) encoder" with the "ID3-demuxer" name) is: james@clefairy:~$ rhythmbox (rhythmbox:24122): GLib-GObject-CRITICAL **: g_object_unref: assertion `G_IS_OBJECT (object)' failed Rhythmbox-Message: Missing plugin: gstreamer|0.10|rhythmbox|MPEG-1 Layer 3 (MP3) encoder|encoder-audio/mpeg, mpegversion=(int)1, layer=(int)3 /usr/lib/python2.7/dist-packages/gobject/constants.py:24: Warning: g_boxed_type_register_static: assertion `g_type_from_name (name) == 0' failed import gobject._gobject It doesn't help that each time I have to install/remove the entire Gstreamer-ugly collection each time - I can't find that specific file. The CD plays fine, it's the ripping plugin that doesn't seem to work. I didn't have this problem previously on 12.04 (64 bit).

    Read the article

  • RPi and Java Embedded GPIO: Connecting LEDs

    - by hinkmond
    Next, we need some low-level peripherals to connect to the Raspberry Pi GPIO header. So, we'll do what's called a "Fry's Run" in Silicon Valley, which means we go shop at the local Fry's Electronics store for parts. In this case, we'll need some breadboard jumper wires (blue wires in photo), some LEDs, and some resistors (for the RPi GPIO, 150 ohms - 300 ohms would work for the 3.3V output of the GPIO ports). And, if you want to do other projects, you might as well by a breadboard, which is a development board with lots of holes in it. Ask a Fry's clerk for help. Or, better yet, ask the customer standing next to you in the electronics components aisle for help. (Might be faster) So, go to your local hobby electronics store, or go to Fry's if you have one close by, and come back here to the next blog post to see how to hook these parts up. Hinkmond

    Read the article

  • Upload Recordings Of The Problem To Your SR

    - by bseckin
    Do you find yourself trying several times to explain a problem in a Service Request? Does the support engineer ask more than once for clarification? If so, you might be interested in DITO -- Demo It To Oracle. DITO uses CamStudio (free download!) to record the exact nature of the problem, and upload the output to your SR. The following articles provide more details: Working with Support - MOSSOS (Doc ID 1265130.1) "Demo It To Oracle" (DITO) - CamStudio Help (Doc ID 11.1) Why take up valuable time first explaining the problem, then trying to get a web conference setup to show exactly what is going on? The next time you file an SR, try including a recording showing exactly which application is failing, where it is failing, and what it looks like when it fails.

    Read the article

  • Windows 8 client virtualization

    - by John Paul Cook
    Hyper-V is coming to Windows 8, but you must have a processor that supports SLAT. Virtual machines created with Virtual PC aren’t easily transferred to Windows 2008 Hyper-V and vice-versa. With Windows 8, it will be easy to move vhds from Windows 8 on your laptop or desktop to Windows 8 server and back again. To find out if your processor supports SLAT, run coreinfo –v from a command window running as administrator. Download coreinfo from here . My MacBook Pro supports SLAT as this output shows:...(read more)

    Read the article

  • BizTalk 2009 - Custom Functoid Wizard

    - by StuartBrierley
    When creating BizTalk maps you may find that there are times when you need perform tasks that the standard functoids do not cover.  At other times you may find yourself reapeating a pattern of standard functoids over and over again, adding visual complexity to an otherwise simple process.  In these cases you may find it preferable to create your own custom functoids.  In the past I have created a number of custom functoids from scratch, but recently I decided to try out the Custom Functoid Wizard for BizTalk 2009. After downloading and installing the wizard you should start Visual Studio and select to create a new BizTalk Server Functoid Project. Following the splash screen you will be presented with the General Properties screen, where you can set the classname, namespace, assembly name and strong name key file. The next screen is the first set of properties for the functoid.  First of all is the fuctoid ID; this must be a value above 6000. You should also then set the name, tooltip and description of the functoid.  The name will appear in the visual studio toolbox and the tooltip on hover over in the toolbox.  The descrition will be shown when you configure the functoid inputs when using it in a map; as such it should provide a decent level of information to allow the functoid to be used. Next you must set the category, exception mesage, icon and implementation language.  The category will affect the positioning of the functoid within the toolbox and also some of the behaviours of the functoid. We must then define the parameters and connections for our new functoid.  Here you can define the names and types of your input parameters along with the minimum and maximum number of input connections.  You will also need to define the types of connections accepted and the output type of the functoid. Finally you can click finish and your custom functoid project will be created. The results of this process can be seen in the solution explorer, where you will see that a project, functoid class file and a resource file have been created for you. If you open the class file you will see that the following code has been created for you: The "base" function sets all the properties that you previsouly detailed in the custom functoid wizard.  public TestFunctoids():base()  {    int functoidID;    // This has to be a number greater than 6000    functoidID = System.Convert.ToInt32(resmgr.GetString("FunctoidId"));    this.ID = functoidID;    // Set Resource strings, bitmaps    SetupResourceAssembly(ResourceName, Assembly.GetExecutingAssembly());    SetName("FunctoidName");                     SetTooltip("FunctoidToolTip");    SetDescription("FunctoidDescription");    SetBitmap("FunctoidBitmap");    // Minimum and maximum parameters that the functoid accepts    this.SetMinParams(2);    this.SetMaxParams(2);    /// Function name that needs to be called when this Functoid is invoked.    /// Put this in GAC.    SetExternalFunctionName(GetType().Assembly.FullName,     "MyCompany.BizTalk.Functoids.TestFuntoids.TestFunctoids", "Execute");    // Category for this functoid.    this.Category = FunctoidCategory.String;    // Input and output Connection type    this.OutputConnectionType = ConnectionType.AllExceptRecord;    AddInputConnectionType(ConnectionType.AllExceptRecord);   } The "Execute" function provides a skeleton function that contains the code to be executed by your new functoid.  The inputs and outputs should match those you defined in the Custom Functoid Wizard.   public System.Int32 Execute(System.Int32 Cool)   {    ResourceManager resmgr = new ResourceManager(ResourceName, Assembly.GetExecutingAssembly());    try    {     // TODO: Implement Functoid Logic    }    catch (Exception e)    {     throw new Exception(resmgr.GetString("FunctoidException"), e);    }   } Opening the resource file you will see some of the various string values that you defined in the Custom Functoid Wizard - Name, Tooltip, Description and Exception. You can also select to look at the image resources.  This will display the embedded icon image for the functoid.  To change this right click the icon and select "Import from File". Once you have completed the skeleton code you can then look at trying out your functoid. To do this you will need to build the project, copy the compiled DLL to C:\Program Files\Microsoft BizTalk Server 2009\Developer Tools\Mapper Extensions and then refresh the toolbox in visual studio.

    Read the article

  • ubuntu 14 painfully slow on dell r200

    - by sirmonkey
    I didn't notice it at first. The machines (there is 20 plus) are to be used a simple file servers. It wasn't until samba just wouldn't act right that I installed a desktop gui and started more diagnoseing the problem did I catch the slow preformance... I've tested 4 servers they all suck. And windows 7 runs fantastic on them. I have Google and searched. But nothing to explain this. The easy test is dmesg is so slow you can almost read it. I'm guessing it's an apic or cpu power management issue. What output would you all like????? It is a core2 machine with 4Gb of ram. On board data.

    Read the article

  • Ubuntu 11.10 is not detecting wired connection on Lenovo G580

    - by Dilip
    I am not able to see wired connection options in header menu. I can see wireless option but still It is not working. Could any one suggest what I am missing? Please find my ifconfig output: =================================== root@rails-dev:/home/rails_work/rdfnet# ifconfig lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:41944 errors:0 dropped:0 overruns:0 frame:0 TX packets:41944 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:4602835 (4.6 MB) TX bytes:4602835 (4.6 MB) ===================================

    Read the article

  • Does 64-bit Ubuntu work on the Acer Aspire One D255

    - by hippietrail
    The Acer Aspire One D255 is the cheapest dual core netbook on the market right now. It has an Intel Atom N550 which should be able to run a 64-bit OS. But when I try to boot the Ubuntu 64-bit live CD I only get one line of diagnostic output that it "found something" on the USB CD drive before locking up. I haven't been able to find anything by Googling yet. Could it just be driver issues for this machine or could the platform be inherently frail for running 64-bit? (My machine is two days old on trial and Windows 7 and Ubuntu 32-bit run but it has locked up under casual use on both OSes.)

    Read the article

  • How to use a zenity progress bar with cclive

    - by Winael
    I tried to use a zenity progress bar with cclive. I'm writting a script to download web videos files and I wanna see the progression of the download. But when I try something like $cclive <url> 2>&1 | zenity --progress But when I execute the command line but it not seems to work. Any idea of how I can do that ? BR, [Edit] cclive have this kind of output : cclive http://www.youtube.com/watch?v=youtubevideo Checking ... .......... ..........done. youtubevideo.flv 2.5M 75.8K/s 00:09:29 5% So I need to send the last part to sdout but I dont know how. Else and about pulsate, we can't see th progression with this option, and I really need it... So I will not using pulsate for this script.

    Read the article

  • Mount an external drive at boot time only if it is plugged in.

    - by Jeremy
    I've got an entry for an external harddrive in my fstab: UUID="680C0FE30C0FAAE0" /jgdata ntfs noatime,rw But sometimes this drive isn't plugged in at boot time. This leaves me half way through a boot, with a prompt to "Continue Waiting, press S or press M" but no keypress has any affect at this stage (including ctrl-alt-delete, not even caps-lock). Short of writing a script to check the output of fdisk -l, how can I mount this drive at boot time only if it is present? It would be handy to have an fdisk entry for this drive, so I can just type mount /jgdata instead of needing a device name.

    Read the article

  • How to unit test image processing code?

    - by rold2007
    I'm working in image processing (mainly OCR) and I wonder how I should integrate unit tests in my development. I'm already using unit tests for more "common" type of code but when dealing with image processing code I'm not sure how to deal with it. This kind of code always need some image data input/output and mocking this is not obvious. For now I'm mostly doing integration tests but they take a while to run and I would like some ideas on how to break down this kind of code into unit tests so that I can run them more quickly.

    Read the article

  • Can't display RSSI values in Wireshark

    - by Giovanni Soldi
    I am trying to analyze the up-link Wireless traffic generated by my Sony Ericsson phone and captured by my D-Link router, on which I installed the DD-WRT firmware. To do this, first I log in the router and enable the prism0 interface by typing the command: wl -i eth1 monitor 1 and then I start to capture the packets by typing: tcpdump -i prism0 ether src xx:xx:xx:xx:xx:xx -s0 -w /tmp/smbshare/sony_ericsson_test.pcap where xx:xx:xx:xx:xx:xx is the MAC address of my Sony Ericsson phone. After a while I transfer the sony_ericsson_test.pcap file to my computer and open it with Wireshark program. In order to display the RSSI values I follow this procedure: Edit - Preferences... - Columns - Press "Add" button - As "Field type" I choose "IEEE 802.11 RSSI" and finally I choose name "Power" and click on "Apply" button. The problem is that the column "Power" is empty with no RSSI values. Does Anyone has a clue on why are RSSI values not displayed? Maybe I am missing a passage. Looking forward to hearing from anyone of you! Thanks in advance for your help!

    Read the article

  • How to get distinct values from the List&lt;T&gt; with LINQ

    - by Vincent Maverick Durano
    Recently I was working with data from a generic List<T> and one of my objectives is to get the distinct values that is found in the List. Consider that we have this simple class that holds the following properties: public class Product { public string Make { get; set; } public string Model { get; set; } }   Now in the page code behind we will create a list of product by doing the following: private List<Product> GetProducts() { List<Product> products = new List<Product>(); Product p = new Product(); p.Make = "Samsung"; p.Model = "Galaxy S 1"; products.Add(p); p = new Product(); p.Make = "Samsung"; p.Model = "Galaxy S 2"; products.Add(p); p = new Product(); p.Make = "Samsung"; p.Model = "Galaxy Note"; products.Add(p); p = new Product(); p.Make = "Apple"; p.Model = "iPhone 4"; products.Add(p); p = new Product(); p.Make = "Apple"; p.Model = "iPhone 4s"; products.Add(p); p = new Product(); p.Make = "HTC"; p.Model = "Sensation"; products.Add(p); p = new Product(); p.Make = "HTC"; p.Model = "Desire"; products.Add(p); p = new Product(); p.Make = "Nokia"; p.Model = "Some Model"; products.Add(p); p = new Product(); p.Make = "Nokia"; p.Model = "Some Model"; products.Add(p); p = new Product(); p.Make = "Sony Ericsson"; p.Model = "800i"; products.Add(p); p = new Product(); p.Make = "Sony Ericsson"; p.Model = "800i"; products.Add(p); return products; }   And then let’s bind the products to the GridView. protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { Gridview1.DataSource = GetProducts(); Gridview1.DataBind(); } }   Running the code will display something like this in the page: Now what I want is to get the distinct row values from the list. So what I did is to use the LINQ Distinct operator and unfortunately it doesn't work. In order for it work is you must use the overload method of the Distinct operator for you to get the desired results. So I’ve added this IEqualityComparer<T> class to compare values: class ProductComparer : IEqualityComparer<Product> { public bool Equals(Product x, Product y) { if (Object.ReferenceEquals(x, y)) return true; if (Object.ReferenceEquals(x, null) || Object.ReferenceEquals(y, null)) return false; return x.Make == y.Make && x.Model == y.Model; } public int GetHashCode(Product product) { if (Object.ReferenceEquals(product, null)) return 0; int hashProductName = product.Make == null ? 0 : product.Make.GetHashCode(); int hashProductCode = product.Model.GetHashCode(); return hashProductName ^ hashProductCode; } }   After that you can then bind the GridView like this: protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { Gridview1.DataSource = GetProducts().Distinct(new ProductComparer()); Gridview1.DataBind(); } }   Running the page will give you the desired output below: As you notice, it now eliminates the duplicate rows in the GridView. Now what if we only want to get the distinct values for a certain field. For example I want to get the distinct “Make” values such as Samsung, Apple, HTC, Nokia and Sony Ericsson and populate them to a DropDownList control for filtering purposes. I was hoping the the Distinct operator has an overload that can compare values based on the property value like (GetProducts().Distinct(o => o.PropertyToCompare). But unfortunately it doesn’t provide that overload so what I did as a workaround is to use the GroupBy,Select and First LINQ query operators to achieve what I want. Here’s the code to get the distinct values of a certain field. protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { DropDownList1.DataSource = GetProducts().GroupBy(o => o.Make).Select(o => o.First()); DropDownList1.DataTextField = "Make"; DropDownList1.DataValueField = "Model"; DropDownList1.DataBind(); } } Running the code will display the following output below:   That’s it! I hope someone find this post useful!

    Read the article

  • Cannot boot Win7 after updating to ubuntu 11.10

    - by angryInsomniac
    I had a dual boot setup on my system, with ubuntu 11.04 and Win7. Yesterday I updated ubuntu to 11.10. Now , I cannot seem to be able to load Win7 , I do see an entry for it on the boot menu. I select that entry and then the screen goes black , with everything coming to a standstill. I tried to wait for it to respond but nothing happened. I went through the forums and tried "grub-update" but when I do that , nothing really happens. I am not sure of this , but I get no output from grub for upto 10 minutes ( can grub-update be made verbose ) How can I fix this and get back to booting both OS'es properly ?

    Read the article

  • Inside BackgroundWorker

    - by João Angelo
    The BackgroundWorker is a reusable component that can be used in different contexts, but sometimes with unexpected results. If you are like me, you have mostly used background workers while doing Windows Forms development due to the flexibility they offer for running a background task. They support cancellation and give events that signal progress updates and task completion. When used in Windows Forms, these events (ProgressChanged and RunWorkerCompleted) get executed back on the UI thread where you can freely access your form controls. However, the logic of the progress changed and worker completed events being invoked in the thread that started the background worker is not something you get directly from the BackgroundWorker, but instead from the fact that you are running in the context of Windows Forms. Take the following example that illustrates the use of a worker in three different scenarios: – Console Application or Windows Service; – Windows Forms; – WPF. using System; using System.ComponentModel; using System.Threading; using System.Windows.Forms; using System.Windows.Threading; class Program { static AutoResetEvent Synch = new AutoResetEvent(false); static void Main() { var bw1 = new BackgroundWorker(); var bw2 = new BackgroundWorker(); var bw3 = new BackgroundWorker(); Console.WriteLine("DEFAULT"); var unspecializedThread = new Thread(() => { OutputCaller(1); SynchronizationContext.SetSynchronizationContext( new SynchronizationContext()); bw1.DoWork += (sender, e) => OutputWork(1); bw1.RunWorkerCompleted += (sender, e) => OutputCompleted(1); // Uses default SynchronizationContext bw1.RunWorkerAsync(); }); unspecializedThread.IsBackground = true; unspecializedThread.Start(); Synch.WaitOne(); Console.WriteLine(); Console.WriteLine("WINDOWS FORMS"); var windowsFormsThread = new Thread(() => { OutputCaller(2); SynchronizationContext.SetSynchronizationContext( new WindowsFormsSynchronizationContext()); bw2.DoWork += (sender, e) => OutputWork(2); bw2.RunWorkerCompleted += (sender, e) => OutputCompleted(2); // Uses WindowsFormsSynchronizationContext bw2.RunWorkerAsync(); Application.Run(); }); windowsFormsThread.IsBackground = true; windowsFormsThread.SetApartmentState(ApartmentState.STA); windowsFormsThread.Start(); Synch.WaitOne(); Console.WriteLine(); Console.WriteLine("WPF"); var wpfThread = new Thread(() => { OutputCaller(3); SynchronizationContext.SetSynchronizationContext( new DispatcherSynchronizationContext()); bw3.DoWork += (sender, e) => OutputWork(3); bw3.RunWorkerCompleted += (sender, e) => OutputCompleted(3); // Uses DispatcherSynchronizationContext bw3.RunWorkerAsync(); Dispatcher.Run(); }); wpfThread.IsBackground = true; wpfThread.SetApartmentState(ApartmentState.STA); wpfThread.Start(); Synch.WaitOne(); } static void OutputCaller(int workerId) { Console.WriteLine( "bw{0}.{1} | Thread: {2} | IsThreadPool: {3}", workerId, "RunWorkerAsync".PadRight(18), Thread.CurrentThread.ManagedThreadId, Thread.CurrentThread.IsThreadPoolThread); } static void OutputWork(int workerId) { Console.WriteLine( "bw{0}.{1} | Thread: {2} | IsThreadPool: {3}", workerId, "DoWork".PadRight(18), Thread.CurrentThread.ManagedThreadId, Thread.CurrentThread.IsThreadPoolThread); } static void OutputCompleted(int workerId) { Console.WriteLine( "bw{0}.{1} | Thread: {2} | IsThreadPool: {3}", workerId, "RunWorkerCompleted".PadRight(18), Thread.CurrentThread.ManagedThreadId, Thread.CurrentThread.IsThreadPoolThread); Synch.Set(); } } Output: //DEFAULT //bw1.RunWorkerAsync | Thread: 3 | IsThreadPool: False //bw1.DoWork | Thread: 4 | IsThreadPool: True //bw1.RunWorkerCompleted | Thread: 5 | IsThreadPool: True //WINDOWS FORMS //bw2.RunWorkerAsync | Thread: 6 | IsThreadPool: False //bw2.DoWork | Thread: 5 | IsThreadPool: True //bw2.RunWorkerCompleted | Thread: 6 | IsThreadPool: False //WPF //bw3.RunWorkerAsync | Thread: 7 | IsThreadPool: False //bw3.DoWork | Thread: 5 | IsThreadPool: True //bw3.RunWorkerCompleted | Thread: 7 | IsThreadPool: False As you can see the output between the first and remaining scenarios is somewhat different. While in Windows Forms and WPF the worker completed event runs on the thread that called RunWorkerAsync, in the first scenario the same event runs on any thread available in the thread pool. Another scenario where you can get the first behavior, even when on Windows Forms or WPF, is if you chain the creation of background workers, that is, you create a second worker in the DoWork event handler of an already running worker. Since the DoWork executes in a thread from the pool the second worker will use the default synchronization context and the completed event will not run in the UI thread.

    Read the article

< Previous Page | 341 342 343 344 345 346 347 348 349 350 351 352  | Next Page >