Click here to Skip to main content
15,895,011 members
Home / Discussions / WPF
   

WPF

 
GeneralRe: Problem executing BitmapDecoder.Save() in worker thread Pin
Mark Salsbery31-May-09 12:26
Mark Salsbery31-May-09 12:26 
GeneralRe: Problem executing BitmapDecoder.Save() in worker thread Pin
fjparisIII31-May-09 13:50
fjparisIII31-May-09 13:50 
GeneralRe: Problem executing BitmapDecoder.Save() in worker thread Pin
fjparisIII31-May-09 18:46
fjparisIII31-May-09 18:46 
GeneralRe: Problem executing BitmapDecoder.Save() in worker thread Pin
Mark Salsbery31-May-09 20:18
Mark Salsbery31-May-09 20:18 
GeneralRe: Problem executing BitmapDecoder.Save() in worker thread Pin
fjparisIII1-Jun-09 5:42
fjparisIII1-Jun-09 5:42 
GeneralRe: Problem executing BitmapDecoder.Save() in worker thread Pin
Mark Salsbery1-Jun-09 6:47
Mark Salsbery1-Jun-09 6:47 
GeneralRe: Problem executing BitmapDecoder.Save() in worker thread Pin
fjparisIII1-Jun-09 8:52
fjparisIII1-Jun-09 8:52 
GeneralRe: Problem executing BitmapDecoder.Save() in worker thread Pin
Mark Salsbery1-Jun-09 10:39
Mark Salsbery1-Jun-09 10:39 
fjparisIII wrote:
In the meantime I'm struggling with the prospect of writing a replacement class for BackgroundWorker, struggling because I've never written any threading code under .NET.


Just for fun I tried this....
public class MyWPFBackgroundWorker
{
    private delegate void InvokerDelegate();

    public event DoWorkEventHandler DoWork;
    public event ProgressChangedEventHandler ProgressChanged;
    public event RunWorkerCompletedEventHandler RunWorkerCompleted;

    public void RunWorkerAsync()
    {
        RunWorkerAsync(null);
    }

    public void RunWorkerAsync(Object argument)
    {
        threadargument = argument;
        thread = new Thread(ThreadProc);
        thread.SetApartmentState(ApartmentState.STA);
        thread.Priority = ThreadPriority.Normal;
        thread.Start(this);
    }

    public void ReportProgress(int percentProgress)
    {
        ReportProgress(percentProgress, null);
    }

    public void ReportProgress(int percentProgress, Object userState)
    {
        ProgressChangedEventHandler progresshandler = ProgressChanged;
        if (progresshandler != null)
        {
            Application.Current.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Normal, (InvokerDelegate)delegate
            {
                progresshandler(this, new ProgressChangedEventArgs(percentProgress, userState));
            });
        }
    }


    Thread thread;
    Object threadargument;

    static void ThreadProc(object context)
    {
        MyWPFBackgroundWorker worker = context as MyWPFBackgroundWorker;

        DoWorkEventHandler workhandler = worker.DoWork;
        if (workhandler != null)
        {
            workhandler(worker, new DoWorkEventArgs(worker.threadargument));
        }

        RunWorkerCompletedEventHandler completedhandler = worker.RunWorkerCompleted;
        if (completedhandler != null)
        {
            Application.Current.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Normal, (InvokerDelegate)delegate
            {
                completedhandler(worker, new RunWorkerCompletedEventArgs(null, null, false));
            });
        }
    }
}

Seems to work like BackgroundWorker, except it's not on a threadpool thread and the
thread state is STA...please let me know about any bugs Smile | :)

Mark Salsbery
Microsoft MVP - Visual C++

Java | [Coffee]

General[Message Deleted] Pin
fjparisIII1-Jun-09 13:34
fjparisIII1-Jun-09 13:34 
GeneralRe: Problem executing BitmapDecoder.Save() in worker thread Pin
Mark Salsbery1-Jun-09 13:46
Mark Salsbery1-Jun-09 13:46 
General[Message Deleted] Pin
fjparisIII1-Jun-09 14:23
fjparisIII1-Jun-09 14:23 
GeneralRe: Problem executing BitmapDecoder.Save() in worker thread Pin
Mark Salsbery1-Jun-09 14:33
Mark Salsbery1-Jun-09 14:33 
General[Message Deleted] Pin
fjparisIII1-Jun-09 14:43
fjparisIII1-Jun-09 14:43 
GeneralRe: Problem executing BitmapDecoder.Save() in worker thread Pin
Mark Salsbery1-Jun-09 15:23
Mark Salsbery1-Jun-09 15:23 
General[Message Deleted] Pin
fjparisIII1-Jun-09 16:05
fjparisIII1-Jun-09 16:05 
GeneralRe: Problem executing BitmapDecoder.Save() in worker thread Pin
Mark Salsbery1-Jun-09 17:09
Mark Salsbery1-Jun-09 17:09 
GeneralRe: Problem executing BitmapDecoder.Save() in worker thread [modified] Pin
Mark Salsbery1-Jun-09 14:13
Mark Salsbery1-Jun-09 14:13 
General[Message Deleted] Pin
fjparisIII1-Jun-09 16:39
fjparisIII1-Jun-09 16:39 
GeneralRe: Problem executing BitmapDecoder.Save() in worker thread Pin
Mark Salsbery1-Jun-09 17:06
Mark Salsbery1-Jun-09 17:06 
General[Message Deleted] Pin
fjparisIII1-Jun-09 17:56
fjparisIII1-Jun-09 17:56 
General[Message Deleted] Pin
fjparisIII2-Jun-09 4:40
fjparisIII2-Jun-09 4:40 
General[Message Deleted] Pin
fjparisIII2-Jun-09 5:33
fjparisIII2-Jun-09 5:33 
GeneralRe: Problem executing BitmapDecoder.Save() in worker thread [modified] Pin
fjparisIII2-Jun-09 6:24
fjparisIII2-Jun-09 6:24 
GeneralRe: Problem executing BitmapDecoder.Save() in worker thread Pin
Mark Salsbery2-Jun-09 6:36
Mark Salsbery2-Jun-09 6:36 
GeneralRe: Problem executing BitmapDecoder.Save() in worker thread [modified] Pin
fjparisIII2-Jun-09 7:00
fjparisIII2-Jun-09 7:00 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.