نمایش نتایج 1 تا 5 از 5

نام تاپیک: ایرادی عجیب در استفاده از FolderBrowserDialog

  1. #1

    ایرادی عجیب در استفاده از FolderBrowserDialog

    با سلام دوستان وقتی می خوام از FolderBrowserDialog استفاده کنم و وقتی متد ShowDialog رو صدا می زنم با این ارور مواجعه می شوم



    Current thread must be set to single thread apartment (STA) mode before OLE calls can be made. Ensure that your Main function has STAThreadAttribute marked on it. This exception is only raised if a debugger is attached to the process.

    اینم بگم توپروژه اصلی چنین اتفاقی می افته وقتی یه پروژه جدید درست می کنم به راحتی می تونم از FolderBrowserDialog
    حالا به نظرتون مشکل از چیه ؟
    خیلی ضروری نیاز دارم ...
    اگر نتونم از این مورد استفاده کنم به نظرتون برای بدست آوردن آدرس پوشه باید از چی استفاده کنم

  2. #2
    کاربر تازه وارد آواتار cpppro
    تاریخ عضویت
    آبان 1390
    محل زندگی
    In The Earth
    پست
    98

    نقل قول: ایرادی عجیب در استفاده از FolderBrowserDialog

    سلام
    احیانا از ترد تو پروژه استفاده نکردین که ؟
    میشه کد مربوطه رو هم قرار بدین ؟

  3. #3

    نقل قول: ایرادی عجیب در استفاده از FolderBrowserDialog

    نقل قول نوشته شده توسط andaron مشاهده تاپیک
    با سلام دوستان وقتی می خوام از FolderBrowserDialog استفاده کنم و وقتی متد ShowDialog رو صدا می زنم با این ارور مواجعه می شوم اینم بگم توپروژه اصلی چنین اتفاقی می افته وقتی یه پروژه جدید درست می کنم به راحتی می تونم از FolderBrowserDialog حالا به نظرتون مشکل از چیه ؟ خیلی ضروری نیاز دارم ... اگر نتونم از این مورد استفاده کنم به نظرتون برای بدست آوردن آدرس پوشه باید از چی استفاده کنم
    سلام.
    ایراد کاملا روشن و واضح در پیامی که قرار داده اید، بیان شده. Thread جاری (که در اون از FolderBrowserDialog استفاده می کنید)، MTA مارک شده در حالیکه Component مورد نظر انتظار داره تا Apartment Model روی STA ست شده باشه. برای رفع مشکل چند روش وجود داره که خوشبختانه در این آدرس به اونها اشاره شده.

    موفق باشید.

  4. #4

    نقل قول: ایرادی عجیب در استفاده از FolderBrowserDialog

    آیا قبل از main برنامه [STAThread] وجود داره؟

    اگه با اون مشکل حل نشد این راه حله:


    using System; using System.Collections;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Configuration.Install;
    using System.Linq;
    using System.Windows.Forms;

    namespaceWindowsFormsApplication1
    {
    [RunInstaller(true)]
    publicpartialclassInstaller1 : Installer
    {
    publicInstaller1()
    {
    MessageBox.Show("Cannot Locate Config File");
    MessageBox.Show("Pid : " + System.Diagnostics.Process.GetCurrentProcess().Id.ToString());
    String Location = String.Empty;
    OpenFileDialog frm = newOpenFileDialog();
    frm.InitializeLifetimeService();
    frm.Filter = "Config Files (*.config)|*.config| (*.xml)|*.xml";
    frm.Title = "Browse Config file";
    DialogResultret = STAShowDialog(frm);

    if (ret == DialogResult.OK)
    Location = frm.FileName;

    MessageBox.Show(Location);

    InitializeComponent();
    }

    /* STAShowDialog takes a FileDialog and shows it on a background STA thread and returns the results.
    * Usage:
    * OpenFileDialog d = new OpenFileDialog();
    * DialogResult ret = STAShowDialog(d);
    * if (ret == DialogResult.OK)
    * MessageBox.Show(d.FileName);
    */
    privateDialogResult STAShowDialog(FileDialogdialog)
    {
    DialogState state = newDialogState();
    state.dialog = dialog;
    System.Threading.Thread t = new System.Threading.Thread(state.ThreadProcShowDialog);
    t.SetApartmentState(System.Threading.ApartmentState.STA);
    t.Start();
    t.Join();
    returnstate.result;
    }
    }

    /* Helper class to hold state and return value in order to call FileDialog.ShowDialog on a background thread.
    * Usage:
    * DialogState state = new DialogState();
    * state.dialog = // <any class that derives from FileDialog>
    * System.Threading.Thread t = new System.Threading.Thread(state.ThreadProcShowDialog );
    * t.SetApartmentState(System.Threading.ApartmentStat e.STA);
    * t.Start();
    * t.Join();
    * return state.result;
    */
    publicclassDialogState
    {
    publicDialogResultresult;
    publicFileDialogdialog;

    publicvoidThreadProcShowDialog()
    {
    result = dialog.ShowDialog();
    }
    }
    }



  5. #5

    نقل قول: ایرادی عجیب در استفاده از FolderBrowserDialog

    نقل قول نوشته شده توسط mehdi.mousavi مشاهده تاپیک
    سلام.
    ایراد کاملا روشن و واضح در پیامی که قرار داده اید، بیان شده. Thread جاری (که در اون از FolderBrowserDialog استفاده می کنید)، MTA مارک شده در حالیکه Component مورد نظر انتظار داره تا Apartment Model روی STA ست شده باشه. برای رفع مشکل چند روش وجود داره که خوشبختانه در این آدرس به اونها اشاره شده.

    موفق باشید.
    ممنون از پاسختون
    مشکلم حل شد
    کهمن از این کد استفاده کردم

    string selectedPath;
    var t = new Thread((ThreadStart)(() => {
    FolderBrowserDialog fbd = new FolderBrowserDialog();
    fbd.RootFolder = System.Environment.SpecialFolder.MyComputer;
    fbd.ShowNewFolderButton = true;
    if (fbd.ShowDialog() == DialogResult.Cancel)
    return;

    selectedPath = fbd.SelectedPath;
    }));

    t.SetApartmentState(ApartmentState.STA);
    t.Start();
    t.Join();



    حالا سوال اینه که چرا همچین مشکلی به وجود اومد و اینکه اصالا کد مالا که مشکل من رو حل کرد چیه یعنی چه کاری انجام میده
    آخرین ویرایش به وسیله andaron : پنج شنبه 19 مرداد 1391 در 20:42 عصر

تاپیک های مشابه

  1. یه اشکال عجیب در استفاده از list ها
    نوشته شده توسط samsami در بخش C#‎‎
    پاسخ: 2
    آخرین پست: یک شنبه 01 آبان 1390, 11:05 صبح
  2. مشکی عجیب در استفاده از ؟bindingNavigator1
    نوشته شده توسط نیما حتمی در بخش C#‎‎
    پاسخ: 1
    آخرین پست: دوشنبه 05 اردیبهشت 1390, 12:05 عصر
  3. یک ارور عجیب هنگام استفاده از آجاکس
    نوشته شده توسط mojniknam در بخش ASP.NET Web Forms
    پاسخ: 2
    آخرین پست: پنج شنبه 05 اردیبهشت 1387, 19:55 عصر
  4. یک پیغام عجیب موقع استفاده از ajax
    نوشته شده توسط my_blithe در بخش ASP.NET Web Forms
    پاسخ: 3
    آخرین پست: یک شنبه 21 بهمن 1386, 22:27 عصر
  5. یه مشکل خیلی عجیب در استفاده از @@identity
    نوشته شده توسط javad3151 در بخش SQL Server
    پاسخ: 3
    آخرین پست: شنبه 16 دی 1385, 14:43 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •