葡京在线开户仔细商量Silverlight(25) – 2.0线程之Thread, Timer, BackgroundWorker, ThreadPool

 

2、Timer.xaml

 

葡京在线开户 1using System;
葡京在线开户 2using System.Collections.Generic;
葡京在线开户 3using System.Linq;
葡京在线开户 4using System.Net;
葡京在线开户 5using System.Windows;
葡京在线开户 6using System.Windows.Controls;
葡京在线开户 7using System.Windows.Documents;
葡京在线开户 8using System.Windows.Input;
葡京在线开户 9using System.Windows.Media;
葡京在线开户 10using System.Windows.Media.Animation;
葡京在线开户 11using System.Windows.Shapes;
葡京在线开户 12
葡京在线开户 13namespace Silverlight20.Thread
葡京在线开户 14葡京在线开户 15葡京在线开户 16{
葡京在线开户 17    public partial class ThreadPool : UserControl
葡京在线开户 18葡京在线开户 19    葡京在线开户 20{
葡京在线开户 21        public ThreadPool()
葡京在线开户 22葡京在线开户 23        葡京在线开户 24{
葡京在线开户 25            InitializeComponent();
葡京在线开户 26        }
葡京在线开户 27
葡京在线开户 28        private void txtMsgQueueUserWorkItem_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
葡京在线开户 29葡京在线开户 30        葡京在线开户 31{
葡京在线开户 32            // ThreadPool – 线程池的管理类
葡京在线开户 33
葡京在线开户 34            // QueueUserWorkItem(WaitCallback callBack, Object state) – 将点名方法出席线程池队列
葡京在线开户 35            //     WaitCallback callBack – 须求在新开线程里执行的点子
葡京在线开户 36            //     Object state – 传递给钦命方法的参数
葡京在线开户 37            System.Threading.ThreadPool.QueueUserWorkItem(DoWork, DateTime.Now);
葡京在线开户 38        }
葡京在线开户 39
葡京在线开户 40        private void DoWork(object state)
葡京在线开户 41葡京在线开户 42        葡京在线开户 43{
葡京在线开户 44            // 作为线程管理策略的一部分,线程池在创制线程前会有自然的推迟
葡京在线开户 45            // 也正是说线程入队列的时日和线程运转的日子里面有必然的距离
葡京在线开户 46
葡京在线开户 47            DateTime dtJoin = (DateTime)state;
葡京在线开户 48            DateTime dtStart = DateTime.Now;
葡京在线开户 49            System.Threading.Thread.Sleep(3000);
葡京在线开户 50            DateTime dtEnd = DateTime.Now;
葡京在线开户 51
葡京在线开户 52            // Dispatcher.BeginInvoke() – 在与 Dispatcher 相关联的线程上实施钦定的操作。自动生产线程同步
葡京在线开户 53            this.Dispatcher.BeginInvoke(() =>
葡京在线开户 54葡京在线开户 55            葡京在线开户 56{
葡京在线开户 57                txtMsgQueueUserWorkItem.Text += string.Format(“\r\n入队列时间{0} 运营时间{1} 实现时间{2}”,
葡京在线开户 58                    dtJoin.ToString(), dtStart.ToString(), dtEnd.ToString());
葡京在线开户 59            });
葡京在线开户 60        }
葡京在线开户 61
葡京在线开户 62
葡京在线开户 63        private void txtRegisterWaitForSingleObject_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
葡京在线开户 64葡京在线开户 65        葡京在线开户 66{
葡京在线开户 67            System.Threading.AutoResetEvent done = new System.Threading.AutoResetEvent(false);
葡京在线开户 68
葡京在线开户 69            // 为了传递 RegisteredWaitHandle 对象,要将其做三个打包
葡京在线开户 70            RegisteredWaitHandlePacket packet = new RegisteredWaitHandlePacket();
葡京在线开户 71
葡京在线开户 72            // RegisterWaitForSingleObject – 注册三个 WaitHandle 。在逾期或发信号的状态下对点名的回调方法做调用
葡京在线开户 73            // 第①个参数:须求登记的 WaitHandle
葡京在线开户 74            // 第③个参数:必要回调的办法(此处省略掉了寄托项目)
葡京在线开户 75            // 第⑥个参数:传递给回调方法的参数
葡京在线开户 76            // 首个参数:超时时间(到过期时间则调用钦赐的形式)
葡京在线开户 77            // 第四个参数:是还是不是为贰回调用(是到过期时间一次性调用钦定的点子,照旧每趟超时时间后都调用钦命的法门)
葡京在线开户 78            packet.Handle = System.Threading.ThreadPool.RegisterWaitForSingleObject
葡京在线开户 79                (
葡京在线开户 80                    done,
葡京在线开户 81                    WaitOrTimer,
葡京在线开户 82                    packet,
葡京在线开户 83                    100,
葡京在线开户 84                    false
葡京在线开户 85                );
葡京在线开户 86
葡京在线开户 87            System.Threading.Thread.Sleep(555);
葡京在线开户 88            done.Set(); // 发出信号,调用 RegisterWaitForSingleObject 所钦命的艺术
葡京在线开户 89        }
葡京在线开户 90
葡京在线开户 91        public void WaitOrTimer(object state, bool timedOut)
葡京在线开户 92葡京在线开户 93        葡京在线开户 94{
葡京在线开户 95            RegisteredWaitHandlePacket packet = state as RegisteredWaitHandlePacket;
葡京在线开户 96
葡京在线开户 97            // bool timedOut – 是还是不是是因为超时而执行到那边
葡京在线开户 98            if (!timedOut) 
葡京在线开户 99葡京在线开户 100            葡京在线开户 101{
葡京在线开户 102                // 借使不是因为超时而执行到那边(即因为 AutoReset伊芙nt 发出了信号而进行到此地),则撤除费物价指数定的 RegisteredWaitHandle
葡京在线开户 103                packet.Handle.Unregister(null);
葡京在线开户 104            }
葡京在线开户 105
葡京在线开户 106            this.Dispatcher.BeginInvoke(() =>
葡京在线开户 107葡京在线开户 108            葡京在线开户 109{
葡京在线开户 110                txtRegisterWaitForSingleObject.Text +=
葡京在线开户 111                    String.Format(“\r\n是不是收到信号:{0}”, (!timedOut).ToString());
葡京在线开户 112            });
葡京在线开户 113        }
葡京在线开户 114    }
葡京在线开户 115
葡京在线开户 116葡京在线开户 117    /**//// <summary>
葡京在线开户 118    /// 封装了 RegisteredWaitHandle 的类
葡京在线开户 119    /// </summary>
葡京在线开户 120    public class RegisteredWaitHandlePacket
葡京在线开户 121葡京在线开户 122    葡京在线开户 123{
葡京在线开户 124葡京在线开户 125        public System.Threading.RegisteredWaitHandle Handle 葡京在线开户 126{ get; set; }
葡京在线开户 127    }
葡京在线开户 128}
葡京在线开户 129

 

从长商议Silverlight(25) – 2.0线程之Thread, Timer, BackgroundWorker,
ThreadPool

KEY:商家支付密钥,参考开户邮件设置(必须配备,登录商行平台活动设置),交易进程生成签名的密钥,仅保留在商行系统和微信支付后台,不会在网络中盛传。商家妥当保管该Key,切勿在网络中传输,不可能在其他客户端中蕴藏,保险key不会被败露。商行可根据邮件提示登录微信商家平台举办设置。也可按一下门道设置:微信商家平台(pay.weixin.qq.com)–>账户设置–>API安全–>密钥设置.
APPSECRET:公众帐号secert(仅JSAPI支付的时候须求布置,
登录公众平台,进入开发者宗旨可安装)

葡京在线开户 130using System;
葡京在线开户 131using System.Collections.Generic;
葡京在线开户 132using System.Linq;
葡京在线开户 133using System.Net;
葡京在线开户 134using System.Windows;
葡京在线开户 135using System.Windows.Controls;
葡京在线开户 136using System.Windows.Documents;
葡京在线开户 137using System.Windows.Input;
葡京在线开户 138using System.Windows.Media;
葡京在线开户 139using System.Windows.Media.Animation;
葡京在线开户 140using System.Windows.Shapes;
葡京在线开户 141
葡京在线开户 142namespace Silverlight20.Thread
葡京在线开户 143葡京在线开户 144葡京在线开户 145{
葡京在线开户 146    public partial class Thread : UserControl
葡京在线开户 147葡京在线开户 148    葡京在线开户 149{
葡京在线开户 150        string result = “”;
葡京在线开户 151
葡京在线开户 152        public Thread()
葡京在线开户 153葡京在线开户 154        葡京在线开户 155{
葡京在线开户 156            InitializeComponent();
葡京在线开户 157
葡京在线开户 158            Demo();
葡京在线开户 159        }
葡京在线开户 160
葡京在线开户 161        void Demo()
葡京在线开户 162葡京在线开户 163        葡京在线开户 164{
葡京在线开户 165葡京在线开户 166            /**//*
葡京在线开户 167             * Thread – 用于线程的创建和操纵的类
葡京在线开户 168             *     Name – 线程名称
葡京在线开户 169             *     IsBackground – 是不是是后台线程(对于Silverlight来说,是不是是后台线程没分别)
葡京在线开户 170             *     Start(object parameter) – 运行后台线程
葡京在线开户 171             *         object parameter – 为后台线程传递的参数
葡京在线开户 172             *     IsAlive – 线程是还是不是在推行中
葡京在线开户 173             *     ManagedThreadId – 当前托管线程的绝无仅有标识符
葡京在线开户 174             *     ThreadState – 钦命线程的图景 [System.Threading.ThreadState枚举]
葡京在线开户 175             *     Abort() – 终止线程
葡京在线开户 176             */
葡京在线开户 177
葡京在线开户 178            // DoWork 是后台线程所实行的方法(此处省略掉了寄托项目)
葡京在线开户 179            // ThreadStart 委托不能带参数, ParameterizedThreadStart 委托能够带参数
葡京在线开户 180            System.Threading.Thread thread = new System.Threading.Thread(DoWork);
葡京在线开户 181            thread.Name = “ThreadDemo”;
葡京在线开户 182            thread.IsBackground = true;
葡京在线开户 183            thread.Start(1000);
葡京在线开户 184
葡京在线开户 185            result += thread.IsAlive + “\r\n”;
葡京在线开户 186            result += thread.ManagedThreadId + “\r\n”;
葡京在线开户 187            result += thread.Name + “\r\n”;
葡京在线开户 188            result += thread.ThreadState + “\r\n”;
葡京在线开户 189
葡京在线开户 190            // thread.Join(); 阻塞调用线程(本例为主线程),直到内定线程(本例为thread)执行完结甘休
葡京在线开户 191
葡京在线开户 192            // 阻塞调用线程(本例为主线程)
葡京在线开户 193            // 尽管钦命线程执行完结则三番五次(本例为thread执行完结则延续)
葡京在线开户 194            // 如若钦命线程运转的年月抢先钦命时间则持续(本例为thread执行时间即使跨越5秒则连续)
葡京在线开户 195            // 再次回到值为在钦命时间内钦点线程是不是推行达成(本例中thread的推行时间为1秒,所以会回去true)
葡京在线开户 196            if (thread.Join(5000)) 
葡京在线开户 197葡京在线开户 198            葡京在线开户 199{
葡京在线开户 200                result += “钦命线程在5秒内执行达成\r\n”;
葡京在线开户 201            }
葡京在线开户 202
葡京在线开户 203            txtMsg.Text = result;
葡京在线开户 204        }
葡京在线开户 205
葡京在线开户 206        void DoWork(object sleepMillisecond)
葡京在线开户 207葡京在线开户 208        葡京在线开户 209{
葡京在线开户 210            System.Threading.Thread.Sleep((int)sleepMillisecond);
葡京在线开户 211
葡京在线开户 212            result += “新开线程执行完成\r\n”;
葡京在线开户 213        }
葡京在线开户 214    }
葡京在线开户 215}
葡京在线开户 216

 微信 JsApi支付 在那个目录下 Senparc.Weixin.MP.Sample.Controllers
找到JsApi支付。

在线DEMO
http://www.cnblogs.com/webabcd/archive/2008/10/09/1307486.html

先说说在联合下单那里遭遇的坑。

ThreadPool.xaml.cs

原因是,传过去不是实惠的opendid。相当大心看错了,把用户id
当做openid传过去了。

[索引页]
[源码下载]

剖析获得预付付单号:

作者:webabcd

string prepayId = res.Element(“xml”).Element(“prepay_id”).Value;
//获取预支付订单号

OK
[源码下载]

<xml>
<return_code><![CDATA[FAIL]]></return_code>
<return_msg><![CDATA[商户号mch_id与appid不匹配]]></return_msg>
</xml>

示例
1、Thread.xaml

                ViewData["appId"] = TenPayV3Info.AppId;
                ViewData["timeStamp"] = timeStamp;
                ViewData["nonceStr"] = nonceStr;
                ViewData["package"] = package;
                ViewData["paySign"] = TenPayV3.GetJsPaySign(TenPayV3Info.AppId, timeStamp, nonceStr, package, TenPayV3Info.Key);

葡京在线开户 217葡京在线开户 218/**//*
葡京在线开户 219 * 演示用 BackgroundWorker 在后台线程上实施耗费时间的操作
葡京在线开户 220 * 按“开端”键,开端在后台线程执行耗费时间操作,并向UI线程汇报实施进程
葡京在线开户 221 * 按“裁撤”键,终止后台线程
葡京在线开户 222 * BackgroundWorker 调用 UI 线程时会自动做线程同步
葡京在线开户 223 */
葡京在线开户 224
葡京在线开户 225using System;
葡京在线开户 226using System.Collections.Generic;
葡京在线开户 227using System.Linq;
葡京在线开户 228using System.Net;
葡京在线开户 229using System.Windows;
葡京在线开户 230using System.Windows.Controls;
葡京在线开户 231using System.Windows.Documents;
葡京在线开户 232using System.Windows.Input;
葡京在线开户 233using System.Windows.Media;
葡京在线开户 234using System.Windows.Media.Animation;
葡京在线开户 235using System.Windows.Shapes;
葡京在线开户 236
葡京在线开户 237namespace Silverlight20.Thread
葡京在线开户 238葡京在线开户 239葡京在线开户 240{
葡京在线开户 241    public partial class BackgroundWorker : UserControl
葡京在线开户 242葡京在线开户 243    葡京在线开户 244{
葡京在线开户 245        // BackgroundWorker – 用于在单独的线程上运转操作。例如能够在非UI线程上运维耗费时间操作,以幸免UI停止响应
葡京在线开户 246        System.ComponentModel.BackgroundWorker _backgroundWorker;
葡京在线开户 247
葡京在线开户 248        public BackgroundWorker()
葡京在线开户 249葡京在线开户 250        葡京在线开户 251{
葡京在线开户 252            InitializeComponent();
葡京在线开户 253
葡京在线开户 254            BackgroundWorkerDemo();
葡京在线开户 255        }
葡京在线开户 256
葡京在线开户 257        void BackgroundWorkerDemo()
葡京在线开户 258葡京在线开户 259        葡京在线开户 260{
葡京在线开户 261葡京在线开户 262            /**//*
葡京在线开户 263             * WorkerSupportsCancellation – 是或不是援救在其余线程中收回该线程的操作
葡京在线开户 264             * WorkerReportsProgress – 是不是足以告知操作进程
葡京在线开户 265             * ProgressChanged – 报告操作进度时接触的风浪
葡京在线开户 266             * DoWork – BackgroundWorker 调用 RunWorkerAsync() 方法时触发的事件。在此施行具体操作
葡京在线开户 267             * RunWorkerCompleted – 操作实现/撤废/出错开上下班时间触发的事件
葡京在线开户 268             */
葡京在线开户 269
葡京在线开户 270            _backgroundWorker = new System.ComponentModel.BackgroundWorker();
葡京在线开户 271
葡京在线开户 272            _backgroundWorker.WorkerSupportsCancellation = true;
葡京在线开户 273            _backgroundWorker.WorkerReportsProgress = true;
葡京在线开户 274
葡京在线开户 275            _backgroundWorker.ProgressChanged += new System.ComponentModel.ProgressChangedEventHandler(_backgroundWorker_ProgressChanged);
葡京在线开户 276            _backgroundWorker.DoWork += new System.ComponentModel.DoWorkEventHandler(_backgroundWorker_DoWork);
葡京在线开户 277            _backgroundWorker.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler(_backgroundWorker_RunWorkerCompleted);
葡京在线开户 278        }
葡京在线开户 279
葡京在线开户 280        private void btnStart_Click(object sender, RoutedEventArgs e)
葡京在线开户 281葡京在线开户 282        葡京在线开户 283{
葡京在线开户 284            // IsBusy – 钦赐的 BackgroundWorker 是还是不是正在后台操作
葡京在线开户 285            // RunWorkerAsync(object argument) – 开始在后台线程执行钦赐的操作
葡京在线开户 286            //     object argument – 须要传递到 DoWork 的参数
葡京在线开户 287            if (!_backgroundWorker.IsBusy)
葡京在线开户 288                _backgroundWorker.RunWorkerAsync(“须求传递的参数”);
葡京在线开户 289        }
葡京在线开户 290
葡京在线开户 291        private void btnCancel_Click(object sender, RoutedEventArgs e)
葡京在线开户 292葡京在线开户 293        葡京在线开户 294{
葡京在线开户 295            // CancelAsync() – 废除 BackgroundWorker 正在实践的后台操作
葡京在线开户 296            if (_backgroundWorker.WorkerSupportsCancellation)
葡京在线开户 297                _backgroundWorker.CancelAsync();
葡京在线开户 298        }
葡京在线开户 299
葡京在线开户 300        void _backgroundWorker_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
葡京在线开户 301葡京在线开户 302        葡京在线开户 303{
葡京在线开户 304葡京在线开户 305            /**//*
葡京在线开户 306             * DoWork伊芙ntArgs.Argument – RunWorkerAsync(object argument)传递过来的参数
葡京在线开户 307             * DoWork伊芙ntArgs.Cancel – 撤销操作
葡京在线开户 308             * DoWork伊夫ntArgs.Result – 操作的结果。将传递到 RunWorkerCompleted 所钦定的格局
葡京在线开户 309             * BackgroundWorker.ReportProgress(int percentProgress, object userState) – 向 ProgressChanged 汇报操作的完毕进程
葡京在线开户 310             *     int percentProgress – 操作完结的百分比 1% – 百分之百
葡京在线开户 311             *     object userState – 传递到 ProgressChanged 的参数
葡京在线开户 312             */
葡京在线开户 313
葡京在线开户 314            for (int i = 0; i < 10; i++)
葡京在线开户 315葡京在线开户 316            葡京在线开户 317{
葡京在线开户 318                if ((_backgroundWorker.CancellationPending == true))
葡京在线开户 319葡京在线开户 320                葡京在线开户 321{
葡京在线开户 322                    e.Cancel = true;
葡京在线开户 323                    break;
葡京在线开户 324                }
葡京在线开户 325                else
葡京在线开户 326葡京在线开户 327                葡京在线开户 328{
葡京在线开户 329                    System.Threading.Thread.Sleep(1000);
葡京在线开户 330                    _backgroundWorker.ReportProgress((i + 1) * 10, i);
葡京在线开户 331                }
葡京在线开户 332            }
葡京在线开户 333
葡京在线开户 334            e.Result = “操作已做到”;
葡京在线开户 335        }
葡京在线开户 336
葡京在线开户 337        void _backgroundWorker_ProgressChanged(object sender, System.ComponentModel.ProgressChangedEventArgs e)
葡京在线开户 338葡京在线开户 339        葡京在线开户 340{
葡京在线开户 341            // ProgressChanged伊芙ntArgs.ProgressPercentage – ReportProgress 传递过来的操作实现的比重
葡京在线开户 342            // ProgressChanged伊芙ntArgs.UserState – ReportProgress 传递过来的参数
葡京在线开户 343            txtProgress.Text = string.Format(“完毕进度:{0}%;参数:{1}”,
葡京在线开户 344                e.ProgressPercentage,
葡京在线开户 345                e.UserState);
葡京在线开户 346        }
葡京在线开户 347
葡京在线开户 348        void _backgroundWorker_RunWorkerCompleted(object sender, System.ComponentModel.RunWorkerCompletedEventArgs e)
葡京在线开户 349葡京在线开户 350        葡京在线开户 351{
葡京在线开户 352葡京在线开户 353            /**//*
葡京在线开户 354             * RunWorkerCompleted伊夫ntArgs.Error – DoWork 时发生的荒唐
葡京在线开户 355             * RunWorkerCompleted伊芙ntArgs.Cancelled – 后台操作是不是已被撤消
葡京在线开户 356             * RunWorkerCompletedEventArgs.Result – DoWork 的结果
葡京在线开户 357             */
葡京在线开户 358
葡京在线开户 359            if (e.Error != null)
葡京在线开户 360葡京在线开户 361            葡京在线开户 362{
葡京在线开户 363                txtMsg.Text += e.Error.ToString() + “\r\n”;
葡京在线开户 364            }
葡京在线开户 365            else if (e.Cancelled)
葡京在线开户 366葡京在线开户 367            葡京在线开户 368{
葡京在线开户 369                txtMsg.Text += “操作被吊销\r\n”;
葡京在线开户 370            }
葡京在线开户 371            else
葡京在线开户 372葡京在线开户 373            葡京在线开户 374{
葡京在线开户 375                txtMsg.Text += e.Result.ToString() + “\r\n”;
葡京在线开户 376            }
葡京在线开户 377        }
葡京在线开户 378    }
葡京在线开户 379}
葡京在线开户 380

3.在统一下单,解析重临来的结果出现 appid
and openid not match,appid和openid分歧盟。

BackgroundWorker.xaml.cs

 

葡京在线开户 381<UserControl x:Class=”Silverlight20.Thread.Thread”
葡京在线开户 382    xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation” 
葡京在线开户 383    xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml"&gt;
葡京在线开户 384    <StackPanel HorizontalAlignment=”Left” Margin=”5″>
葡京在线开户 385    
葡京在线开户 386        <TextBlock x:Name=”txtMsg” />
葡京在线开户 387    
葡京在线开户 388    </StackPanel>
葡京在线开户 389</UserControl>
葡京在线开户 390

先去下载下来Senparc.Weixin SDK。

葡京在线开户 391<UserControl x:Class=”Silverlight20.Thread.BackgroundWorker”
葡京在线开户 392    xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation” 
葡京在线开户 393    xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml"&gt;
葡京在线开户 394    <StackPanel HorizontalAlignment=”Left” Margin=”5″>
葡京在线开户 395
葡京在线开户 396        <StackPanel Orientation=”Horizontal” Margin=”5″>
葡京在线开户 397            <Button x:Name=”btnStart” Content=”开始” Margin=”5″ Click=”btnStart_Click” />
葡京在线开户 398            <Button x:Name=”btnCancel” Content=”取消” Margin=”5″ Click=”btnCancel_Click” />
葡京在线开户 399        </StackPanel>
葡京在线开户 400        
葡京在线开户 401        <StackPanel Margin=”5″>
葡京在线开户 402            <TextBlock x:Name=”txtProgress” Margin=”5″ />
葡京在线开户 403            <TextBlock x:Name=”txtMsg” Margin=”5″ />
葡京在线开户 404        </StackPanel>
葡京在线开户 405
葡京在线开户 406    </StackPanel> 
葡京在线开户 407</UserControl>
葡京在线开户 408

 那里详细说一下对应的参数:

葡京在线开户 409<UserControl x:Class=”Silverlight20.Thread.Timer”
葡京在线开户 410    xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation” 
葡京在线开户 411    xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml"&gt;
葡京在线开户 412    <StackPanel HorizontalAlignment=”Left” Margin=”5″>
葡京在线开户 413    
葡京在线开户 414        <TextBlock x:Name=”txtMsg” />
葡京在线开户 415    
葡京在线开户 416    </StackPanel>
葡京在线开户 417</UserControl>
葡京在线开户 418

public ActionResult JsApi(string code, string state)
        {
            if (string.IsNullOrEmpty(code))
            {
                return Content("您拒绝了授权!");
            }

            if (!state.Contains("|"))
            {
                //这里的state其实是会暴露给客户端的,验证能力很弱,这里只是演示一下
                //实际上可以存任何想传递的数据,比如用户ID,并且需要结合例如下面的Session["OAuthAccessToken"]进行验证
                return Content("验证失败!请从正规途径进入!1001");
            }
            try
            {


                //获取产品信息
                var stateData = state.Split('|');
                int productId = 0;
                ProductModel product = null;
                if (int.TryParse(stateData[0], out productId))
                {
                    int hc = 0;
                    if (int.TryParse(stateData[1], out hc))
                    {
                        var products = ProductModel.GetFakeProductList();
                        product = products.FirstOrDefault(z => z.Id == productId);
                        if (product == null || product.GetHashCode() != hc)
                        {
                            return Content("商品信息不存在,或非法进入!1002");
                        }
                        ViewData["product"] = product;
                    }
                }

                //通过,用code换取access_token
                var openIdResult = OAuthApi.GetAccessToken(TenPayV3Info.AppId, TenPayV3Info.AppSecret, code);
                if (openIdResult.errcode != ReturnCode.请求成功)
                {
                    return Content("错误:" + openIdResult.errmsg);
                }

                string sp_billno = Request["order_no"];
                if (string.IsNullOrEmpty(sp_billno))
                {
                    //生成订单10位序列号,此处用时间和随机数生成,商户根据自己调整,保证唯一
                    sp_billno = string.Format("{0}{1}{2}", TenPayV3Info.MchId, DateTime.Now.ToString("yyyyMMdd"),
                        TenPayV3Util.BuildRandomStr(10));
                }
                else
                {
                    sp_billno = Request["order_no"];
                }

                var timeStamp = TenPayV3Util.GetTimestamp();
                var nonceStr = TenPayV3Util.GetNoncestr();

                var body = product == null ? "test" : product.Name;
                var price = product == null ? 100 : product.Price * 100;
                var xmlDataInfo = new TenPayV3UnifiedorderRequestData(TenPayV3Info.AppId, TenPayV3Info.MchId, body, sp_billno, price, Request.UserHostAddress, TenPayV3Info.TenPayV3Notify, TenPayV3Type.JSAPI, openIdResult.openid, TenPayV3Info.Key, nonceStr);
                var result = TenPayV3.Unifiedorder(xmlDataInfo);//调用统一订单接口

                //JsSdkUiPackage jsPackage = new JsSdkUiPackage(TenPayV3Info.AppId, timeStamp, nonceStr,);
                var package = string.Format("prepay_id={0}", result.prepay_id);

                ViewData["appId"] = TenPayV3Info.AppId;
                ViewData["timeStamp"] = timeStamp;
                ViewData["nonceStr"] = nonceStr;
                ViewData["package"] = package;
                ViewData["paySign"] = TenPayV3.GetJsPaySign(TenPayV3Info.AppId, timeStamp, nonceStr, package, TenPayV3Info.Key);

                return View();
            }
            catch (Exception ex)
            {
                var msg = ex.Message;
                msg += "<br>" + ex.StackTrace;
                msg += "<br>==Source==<br>" + ex.Source;

                if (ex.InnerException != null)
                {
                    msg += "<br>===InnerException===<br>" + ex.InnerException.Message;
                }
                return Content(msg);
            }
        }

4、ThreadPool.xaml

 

3、BackgroundWorker.xaml

1.在联合下单的时候解析再次回到结果,一向出现以下难点:您没有JSAPI支付权限

Timer.xaml.cs

<xml>
<return_code><![CDATA[FAIL]]></return_code>
<return_msg><![CDATA[您没有JSAPI支付权限]]></return_msg>
</xml>

Thread.xaml.cs

案由是自己那么些用户的openid 不是那些群众号的

葡京在线开户 419using System;
葡京在线开户 420using System.Collections.Generic;
葡京在线开户 421using System.Linq;
葡京在线开户 422using System.Net;
葡京在线开户 423using System.Windows;
葡京在线开户 424using System.Windows.Controls;
葡京在线开户 425using System.Windows.Documents;
葡京在线开户 426using System.Windows.Input;
葡京在线开户 427using System.Windows.Media;
葡京在线开户 428using System.Windows.Media.Animation;
葡京在线开户 429using System.Windows.Shapes;
葡京在线开户 430
葡京在线开户 431namespace Silverlight20.Thread
葡京在线开户 432葡京在线开户 433葡京在线开户 434{
葡京在线开户 435    public partial class Timer : UserControl
葡京在线开户 436葡京在线开户 437    葡京在线开户 438{
葡京在线开户 439        System.Threading.SynchronizationContext _syncContext;
葡京在线开户 440        // Timer – 用于以钦赐的时间间隔执行钦点的法子的类
葡京在线开户 441        System.Threading.Timer _timer;
葡京在线开户 442        private int _flag = 0;
葡京在线开户 443
葡京在线开户 444        public Timer()
葡京在线开户 445葡京在线开户 446        葡京在线开户 447{
葡京在线开户 448            InitializeComponent();
葡京在线开户 449
葡京在线开户 450            // UI 线程
葡京在线开户 451            _syncContext = System.Threading.SynchronizationContext.Current;
葡京在线开户 452
葡京在线开户 453            Demo();
葡京在线开户 454        }
葡京在线开户 455
葡京在线开户 456        void Demo()
葡京在线开户 457葡京在线开户 458        葡京在线开户 459{
葡京在线开户 460            // 输出当前时间
葡京在线开户 461            txtMsg.Text = DateTime.Now.ToString() + “\r\n”;
葡京在线开户 462
葡京在线开户 463            // 第③个参数:定时器供给调用的章程
葡京在线开户 464            // 第贰个参数:传给要求调用的不二法门的参数
葡京在线开户 465            // 第多少个参数:此时间后运营定时器
葡京在线开户 466            // 第陆个参数:调用内定方法的间隔时间(System.Threading.Timeout.Infinite 为无穷大)
葡京在线开户 467            _timer = new System.Threading.Timer(MyTimerCallback, “webabcd”, 3000, 1000);
葡京在线开户 468        }
葡京在线开户 469
葡京在线开户 470        private void MyTimerCallback(object state)
葡京在线开户 471葡京在线开户 472        葡京在线开户 473{
葡京在线开户 474            string result = string.Format(“{0} – {1}\r\n”, DateTime.Now.ToString(), (string)state);
葡京在线开户 475
葡京在线开户 476            // 调用 UI 线程。不会做活动线程同步
葡京在线开户 477葡京在线开户 478            _syncContext.Post(delegate 葡京在线开户 479{ txtMsg.Text += result; }, null); 
葡京在线开户 480
葡京在线开户 481            _flag++;
葡京在线开户 482            if (_flag == 5)
葡京在线开户 483                _timer.Change(四千, 500); // 执行四遍后,计时重视置为5秒后运转,每5飞秒的间隔时间执行二次钦定的法子
葡京在线开户 484            else if (_flag == 10)
葡京在线开户 485                _timer.Dispose(); // 执行十四次后,释放计时器所利用的成套能源
葡京在线开户 486        }
葡京在线开户 487    }
葡京在线开户 488}
葡京在线开户 489

原因是自小编得到的经纪人号不是这么些群众号的。一定要检查是或不是其一群众号的商行号。

介绍
Silverlight 2.0 使用Thread, Timer, BackgroundWorker,
ThreadPool来促成四线程开发
    Thread – 用于线程的始建和操纵的类
    Timer – 用于以钦命的小运间隔执行钦命的艺术的类
    BackgroundWorker – 用于在独立的线程上运转操作
    ThreadPool – 线程池的管理类

<xml>
   <return_code><![CDATA[SUCCESS]]></return_code>
   <return_msg><![CDATA[OK]]></return_msg>
   <appid><![CDATA[wx2421b1c4370ec43b]]></appid>
   <mch_id><![CDATA[10000100]]></mch_id>
   <nonce_str><![CDATA[IITRi8Iabbblz1Jc]]></nonce_str>
   <sign><![CDATA[7921E432F65EB8ED0CE9755F0E86D72F]]></sign>
   <result_code><![CDATA[SUCCESS]]></result_code>
   <prepay_id><![CDATA[wx201411101639507cbf6ffd8b0779950874]]></prepay_id>
   <trade_type><![CDATA[APP]]></trade_type>
</xml>

葡京在线开户 490<UserControl x:Class=”Silverlight20.Thread.ThreadPool”
葡京在线开户 491    xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation” 
葡京在线开户 492    xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml"&gt;
葡京在线开户 493    <StackPanel HorizontalAlignment=”Left” Margin=”5″>
葡京在线开户 494
葡京在线开户 495        <TextBlock x:Name=”txtMsgQueueUserWorkItem” Text=”click here” MouseLeftButtonDown=”txtMsgQueueUserWorkItem_MouseLeftButtonDown” Margin=”30″ />
葡京在线开户 496
葡京在线开户 497        <TextBlock x:Name=”txtRegisterWaitForSingleObject” Text=”click here” MouseLeftButtonDown=”txtRegisterWaitForSingleObject_MouseLeftButtonDown” Margin=”30″ />
葡京在线开户 498
葡京在线开户 499    </StackPanel>
葡京在线开户 500</UserControl>
葡京在线开户 501

<xml>
<return_code><![CDATA[FAIL]]></return_code>
<return_msg><![CDATA[openid is
invalid]]></return_msg>
</xml>

2.在联合下单,解析重临来的结果小编出现了商家号mch_id与appid不匹配这么些难题

APPID:微信开放平台审核通过的应用APPID,appid是微信公众账号或开放平台APP的绝无仅有标识,在东风标致平台申请公众账号或然在开放平台申请APP账号后,微信会自动分配对应的appid用于标识该行使。可在微信公众平台–>开发者焦点查看,商行的微信支付核对通过邮件中也会含有该字段值.

weixin.senparc SDK 官网:http://weixin.senparc.com/

MCHID:商家号(必须安插,开户邮件中可查看),商家申请微信支付后,由微信支付分配的生意人收款账号。

当统一下单成功,会回来以下格式的参数

3)检查须求传过去的账户参数,上公众号还有商户号检查你的账户参数是不是正确。作者在开发个中就出现,微信公众号商行号,appid
是各自分歧五个公众号的,坑啊,找了久久,觉得窘迫,原来是给的陈设参数密钥不对。

1)先看看您的民众号微信支付设置是不是正确。

wx.chooseWXPay({
    timestamp: 0, // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符
    nonceStr: '', // 支付签名随机串,不长于 32 位
    package: '', // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=***)
    signType: '', // 签名方式,默认为'SHA1',使用新版支付需传入'MD5'
    paySign: '', // 支付签名
    success: function (res) {
        if (res.err_msg == "get_brand_wcpay_request:ok") {//支付成功

       } else {
          //支付失败

      }
        // 使用以上方式判断前端返回,微信团队郑重提示:res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。
    }
});

 

 

<xml>
<return_code><![CDATA[FAIL]]></return_code>
<return_msg><![CDATA[appid and openid not
match]]></return_msg>
</xml>

给页面对应地参数

2)检查你的授权目录是不是科学,格式要这么,前边记得别漏了一个/  
例如:http://test.cn/u/

 

静态页面js调用:

先是介绍一下自个儿在调用微信支付接口使用的是 weixin.senparc
SDK,卓殊有利好用开源的三个微信支付SDK。

在调起支付接口此前,要求先要调用统一下单接口,商行系统先调用该接口在微信支付服务后台湾学生成预付付交易单,再次来到正确的预付付交易回话标识后再在APP里面调起支付。

先在微信服务后台生成预付付交易单,获得预付付订单号。

3.在统一下单,解析再次回到来的结果出现 CDATA[openid
is invalid],openid无效

关于如何布置微信支付:能够参照这么些 http://jingyan.baidu.com/article/77b8dc7fef360d6174eab690.html