Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# BackgroundWorker等待用户输入的对话框_C#_Wpf_Multithreading_Backgroundworker - Fatal编程技术网

C# BackgroundWorker等待用户输入的对话框

C# BackgroundWorker等待用户输入的对话框,c#,wpf,multithreading,backgroundworker,C#,Wpf,Multithreading,Backgroundworker,我可以从BackgroundWorker打开对话框并暂停它直到用户决定吗 MyWorker = new System.ComponentModel.BackgroundWorker(); MyWorker.DoWork += new System.ComponentModel.DoWorkEventHandler(CopyWorker_DoWork); MyWorker.RunWorkerAsync(); private void MyWorker_DoWork(object sender,

我可以从BackgroundWorker打开对话框并暂停它直到用户决定吗

MyWorker = new System.ComponentModel.BackgroundWorker();
MyWorker.DoWork += new System.ComponentModel.DoWorkEventHandler(CopyWorker_DoWork);
MyWorker.RunWorkerAsync();

private void MyWorker_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
{
    int i=0;
    while ((i) < collection.Count())
    {
       cListEntry item = collection[i];
       if (item.conflicted ==true) {
            Dispatcher.BeginInvoke(new Action(() =>
            {
                var dialog = new WindowConflict();
                //Open dialog and wait for user action
                if (dialog.ShowDialog() == true)
                {
                    item.level = dialog.Response;
                } 
MyWorker=new System.ComponentModel.BackgroundWorker();
MyWorker.DoWork+=新系统.ComponentModel.DoWorkEventHandler(CopyWorker\u DoWork);
MyWorker.RunWorkerAsync();
私有void MyWorker_DoWork(对象发送方,System.ComponentModel.DoWorkEventArgs e)
{
int i=0;
而((i)
{
var dialog=new WindowConflict();
//打开对话框并等待用户操作
if(dialog.ShowDialog()==true)
{
item.level=dialog.Response;
} 

您应该使用invoke而不是begininvoke,begininvoke允许任务继续运行,但您希望它等待。

使用.invoke而不是.begininvoke可以正常工作。但是您不应该这样做。
窗口冲突是什么?@Henkholtman,我不这么认为。唯一的区别是
invoke
>当
BeginInvoke
Send
但两者都发送到调度程序的同步上下文时,Post
。@HamletHakobyan-Milo希望Bgw等待结果。这就是区别。BackgroundWorker上的用户对话框?为什么?